SQL从重复行中只选择一行
Posted
技术标签:
【中文标题】SQL从重复行中只选择一行【英文标题】:SQL select only one row out of duplicate rows 【发布时间】:2020-08-25 05:35:02 【问题描述】:我的 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
【问题讨论】:
【参考方案1】:您可以使用以下通用表表达式和 over 子句查询来完成此操作
WITH PatritionTable (RecordNumber,Uname,Id,Date) AS (
SELECT ROW_NUMBER() OVER (PARTITION BY uname ORDER BY DATE DESC) AS RecordNumber,
Uname,
ID, Date
FROM TABLEA)
UPDATE TABLEB
SET CopyID = p.id
FROM TableB JOIN PatritionTable p
ON p.uname=tableb.Uname
WHERE p.RecordNumber = 1
【讨论】:
以上是关于SQL从重复行中只选择一行的主要内容,如果未能解决你的问题,请参考以下文章
pandas删除数据行中的重复数据行基于dataframe所有列删除重复行基于特定数据列或者列的作何删除重复行删除重复行并保留重复行中的最后一行pandas删除所有重复行(不进行数据保留)
使用“data.table”从重复行中选择非“NA”值——当有多个分组变量时