Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL:Usuń duplikaty

Kandydat do podręcznika dla funkcji 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

Zajmuje się to również sytuacją, w której zestaw duplikatów na (worker_ID,type_ID) ma tę samą date .
Zobacz uproszczoną demo na data.SE .

Aktualizacja do prostszej wersji

Okazuje się, że można to uprościć:W SQL Server możesz usunąć bezpośrednio 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016:Utwórz widok

  2. Przełączanie partycji w SQL Server (T-SQL)

  3. Konwertuj ciąg na wartość daty i godziny w LINQ

  4. Łącznik kontra myślnik:Zastąp myślnik myślnikiem

  5. Tworzenie wbudowanej funkcji z wartościami tabelarycznymi (ITVF) w programie SQL Server