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