sql >> Databáze >  >> RDS >> Sqlserver

SQL:Odstraňte duplikáty

Učebnicový kandidát na funkci okna 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

To se také postará o situaci, kdy soubor napálit na (worker_ID,type_ID) sdílí stejné date .
Podívejte se na zjednodušenou ukázku na data.SE .

Aktualizujte na jednodušší verzi

Ukázalo se, že to lze zjednodušit:V SQL Server můžete odstranit přímo z 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


  1. Jak kombinovat operátor IN s podmínkou LIKE (nebo nejlepší způsob, jak získat srovnatelné výsledky)

  2. Je možné opravit načtení příkazů SQL ze souboru pomocí clojure.java.jdbc?

  3. návrh struktury tabulky mysql?

  4. Aktualizace Yii2 QueryBuilder pomocí funkce Join