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从重复行中只选择一行的主要内容,如果未能解决你的问题,请参考以下文章

SQL:如何从重复行中选择第一条记录?

pandas删除数据行中的重复数据行基于dataframe所有列删除重复行基于特定数据列或者列的作何删除重复行删除重复行并保留重复行中的最后一行pandas删除所有重复行(不进行数据保留)

使用“data.table”从重复行中选择非“NA”值——当有多个分组变量时

如何从mysql列中存在的所有行中删除重复值[duplicate]

SQL:如何为一列中具有重复值的每组行选择一行?

在swift 3中避免数组中的重复