Een leerboekkandidaat voor de vensterfunctie 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
Dit zorgt ook voor de situatie waarin een reeks dupes op (worker_ID,type_ID)
deelt dezelfde date
.
Bekijk de vereenvoudigde demo op data.SE .
Update met eenvoudigere versie
Het blijkt dat dit vereenvoudigd kan worden:in SQL Server kun je direct uit de CTE verwijderen:
;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