【问题标题】:Update by the newest value in another table用另一个表中的最新值更新
【发布时间】:2020-01-29 13:55:47
【问题描述】:

我在TableTap 中有salesperson´s,我需要根据item 将这些更新到TableNimTableTap 有一个日期 tap_Date,我需要获取最新的 salespersonItemTableNim 中的唯一值。

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

查询的结果是每一行都只有一个相同的销售人员。 有什么帮助吗?

【问题讨论】:

标签: sql sql-server sql-update


【解决方案1】:

你可以试试下面的

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

【讨论】:

    【解决方案2】:

    一个非常简单的方法是关联子查询或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) 上的索引,这通常比窗口函数执行得更好。

    【讨论】:

      猜你喜欢
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多