Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL:Hapus duplikat

Kandidat buku teks untuk fungsi jendela 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

Ini juga menangani situasi di mana satu set penipuan pada (worker_ID,type_ID) berbagi date yang sama .
Lihat demo data.SE .

Perbarui dengan versi yang lebih sederhana

Ternyata, ini dapat disederhanakan:Di SQL Server Anda dapat menghapus dari CTE secara langsung:

;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. Mengikat daftar kosong atau nilai nol ke parameter bernilai tabel pada prosedur tersimpan (.NET)

  2. Mengotomatiskan Defragmentasi Indeks di Database MS SQL Server

  3. Permintaan SQL IN menghasilkan hasil yang aneh

  4. Nama kolom Pivot SQL Server Dinamis ( UNPIVOT ) ke nilai baris

  5. Untuk menemukan hari kerja berikutnya