如何从以下列方式设置的表中删除重复项?
- unique_ID | worker_ID | date | type_ID
一个worker可以有多个与它们相关联的type_ID,我想删除任何重复的类型.如果有重复,我想删除具有最新条目的类型.
@H_403_6@解决方法
窗函数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)上的一组欺骗共享相同日期的情况.
请参阅简化的demo on data.SE.
使用更简单的版本更新
事实证明,这可以简化:在sql Server中,您可以直接从CTE中删除:
@H_403_6@ @H_403_6@
- ;WITH x AS (
- SELECT unique_ID,type_ID ORDER BY date) AS rn
- FROM tbl
- )
- DELETE x
- WHERE rn > 1