Обновить по последнему значению в другой таблице - PullRequest
0 голосов
/ 29 января 2020

У меня есть salesperson´s в TableTap, и мне нужно обновить их до TableNim за item. У TableTap есть дата tap_Date, и мне нужно получить самое новое вхождение salesperson. Item является уникальным значением в TableNim.

TableTap
| salesperson   | item  | tap_Date
|---------------|-------|-----------
| person1       | item1 | 2020-01-20
| person1       | item1 | 2020-01-21
| person1       | item2 | 2020-01-22
| person2       | item2 | 2020-01-22
| person2       | item3 | 2020-01-23

Результат должен быть:

TableNim
| salesperson   | item  |
|---------------|-------|
| person1       | item1 |
| person2       | item2 |
| person2       | item3 |

Я пробовал следующее

UPDATE TableNim SET TableNim.myyja =
(SELECT TOP 1 salesperson FROM TableTap
WHERE spec = 1 
and salespersons > '' 
and customer > ''
ORDER BY tap_Date DESC)
FROM TableNim, TableTap
WHERE
TableTap.item = TableNim.item

В результате запроса получился только один продавец в каждом ряду. Любая помощь?

Ответы [ 2 ]

1 голос
/ 29 января 2020

Вы можете попробовать следующее

update tablenim 
   set salesperson=b2.salesperson
  from (select row_number() over(partition by item order by tap_date desc) as rnk
              ,salesperson
              ,item 
          from tabletap
        ) b2
  join tablenim b 
    on b.item=b2.item
   and b2.rnk=1
0 голосов
/ 29 января 2020

Очень простой метод - это коррелированный подзапрос или cross apply:

update n
    set item = t.item
    from TableNim n cross apply
         (select top (1) t.*
          from TableTap t
          where t.salesperson = n.salesperson
          order by tap_date desc
         ) t;

При индексе TableTab(salesperson, tap_date desc, item) это часто работает лучше, чем оконные функции.

...