Un candidato de libro de texto para la función de ventana número_fila():
;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
Esto también soluciona la situación en la que un conjunto de duplicados en (worker_ID,type_ID)
comparte la misma date
.
Vea la demostración simplificada en data.SE .
Actualizar con una versión más sencilla
Resulta que esto se puede simplificar:en SQL Server puede eliminar directamente del 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