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