一尘不染

SQL:删除重复项

sql

如何从以以下方式设置的表中删除重复项?

unique_ID | worker_ID | date | type_ID

一个工作人员可以有多个与他们相关联的type_ID,我想删除所有重复的类型。如果有重复项,我想删除具有最新条目的类型。


阅读 138

收藏
2021-03-10

共1个答案

一尘不染

窗口函数row_number()的教科书候选:

;WITH x AS (
    SELECT unique_ID
          ,row_number() OVER (PARTITION BY worker_ID,type_ID ORDER BY date) AS rn
    FROM   tbl
    )
DELETE FROM tbl
FROM   x
WHERE  tbl.unique_ID = x.unique_ID
AND    x.rn > 1

这也照顾了一组(worker_ID,type_ID)相同的受骗者的情况date
请参阅有关data.SE的简化演示

更新较简单的版本

事实证明,这可以简化:在SQL Server中,您可以直接从CTE中删除:

;WITH x AS (
    SELECT unique_ID
          ,row_number() OVER (PARTITION BY worker_ID,type_ID ORDER BY date) AS rn
    FROM   tbl
    )
DELETE x
WHERE  rn > 1
2021-03-10