Reputation: 9891
I have salesperson´s
in TableTap
and i need to udpate these into TableNim
per item
. TableTap
has a date tap_Date
and i need to get the newest occurence of salesperson
. Item
is a unique value in 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
Result should be:
TableNim
| salesperson | item |
|---------------|-------|
| person1 | item1 |
| person2 | item2 |
| person2 | item3 |
I've tried the following
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
The result of the query ends up to have just one same salesperson in every row. Any help?
Upvotes: 0
Views: 54
Reputation: 1269463
A very simple method is a correlated subquery or 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;
With an index on TableTab(salesperson, tap_date desc, item)
, this often performs better than window functions.
Upvotes: 0
Reputation: 5922
You can try the following
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
Upvotes: 1