Um candidato de livro didático para a função de janela 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
Isso também cuida da situação em que um conjunto de dupes em
(worker_ID,type_ID)
compartilha a mesma date
.Veja a demonstração simplificada de em data.SE .
Atualize com uma versão mais simples
Acontece que isso pode ser simplificado:No SQL Server você pode excluir diretamente do 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