sql >> Base de Datos >  >> RDS >> Sqlserver

SQL:Eliminar duplicados

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