Un candidato da manuale per la funzione finestra numero_riga():
;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
Questo si occupa anche della situazione in cui una serie di duplicati su (worker_ID,type_ID)
condivide la stessa date
.
Consulta la demo su data.SE .
Aggiorna con una versione più semplice
Risulta, questo può essere semplificato:in SQL Server puoi eliminare direttamente dal 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