Učebnicový kandidát na funkci okna 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
To se také postará o situaci, kdy soubor napálit na (worker_ID,type_ID)
sdílí stejné date
.
Podívejte se na zjednodušenou ukázku na data.SE .
Aktualizujte na jednodušší verzi
Ukázalo se, že to lze zjednodušit:V SQL Server můžete odstranit přímo z 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