sql >> Databasteknik >  >> RDS >> Sqlserver

SQL:Ta bort dubbletter

En lärobokskandidat för fönsterfunktionen 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

Detta tar också hand om situationen där en uppsättning duperingar på (worker_ID,type_ID) delar samma date .
Se den förenklade demon på data.SE .

Uppdatera med enklare version

Det visar sig att detta kan förenklas:I SQL Server kan du ta bort från CTE direkt:

;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


  1. Laravel Databas Strikt läge

  2. mysql - kan jag fråga hur många connect_errors en given värd gav?

  3. order by fungerar inte korrekt med två fält

  4. SQL Server RAISERROR-uttalande med enkla exempel