Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL:rimuovi i duplicati

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