如何解决SQL从重复的行中仅选择一行
我的TableA如下
Name ID Uname Date
------------------------------------------
Lname,Fname 1 uname1 20/12/2010
Lname,Fname 2 uname1 15/07/2020
Lname2,Fname2 3 uname2 21/12/2010
Lname2,Fname2 4 uname2 16/07/2020
Lname3,Fname3 5 uname3 22/12/2010
Lname3,Fname3 6 uname3 17/07/2020
Lname4,Fname4 7 uname4 23/12/2010
Lname4,Fname4 8 uname4 18/07/2020
我的TableB如下
Uname CopyID
---------------
uname1
uname2
uname3
uname4
我希望能够根据表A的最新值(即预期结果)更新表B的最新记录
更新后的预期TableB
Unameu CopyID
---------------
uname1 2
uname2 4
uname3 6
uname4 8
代码
UPDATE TABLEB
SET TABLEB.CopyID = TABLEA.ID
FROM TABLEA
INNER JOIN TABLEB ON Uname = Unameu
这不起作用,因为连接条件选择8而不是4
解决方法
您可以使用以下通用表表达式和over子句查询来完成此操作
WITH PatritionTable (RecordNumber,Uname,Id,Date) AS (
SELECT ROW_NUMBER() OVER (PARTITION BY uname ORDER BY DATE DESC) AS RecordNumber,ID,Date
FROM TABLEA)
UPDATE TABLEB
SET CopyID = p.id
FROM TableB JOIN PatritionTable p
ON p.uname=tableb.Uname
WHERE p.RecordNumber = 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。