Ein Lehrbuchkandidat für die Fensterfunktion 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
Dies kümmert sich auch um die Situation, in der eine Reihe von Duplikaten auf (worker_ID,type_ID)
hat dasselbe date
.
Sehen Sie sich die vereinfachte Demo auf data.SE .
Update mit einfacherer Version
Es stellt sich heraus, dass dies vereinfacht werden kann:In SQL Server können Sie direkt aus dem CTE löschen:
;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