Rya*_*yan 0 sql t-sql sql-server
如何从以下列方式设置的表中删除重复项?
unique_ID | worker_ID | date | type_ID
Run Code Online (Sandbox Code Playgroud)
一个worker可以有多个与它们相关联的type_ID,我想删除任何重复的类型.如果有重复,我想删除具有最新条目的类型.
Erw*_*ter 10
窗口函数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
Run Code Online (Sandbox Code Playgroud)
这也解决了(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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
560 次 |
| 最近记录: |