Anda dapat DELETE dari cte:
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table)
DELETE FROM cte
WHERE RowRank > 1
ROW_NUMBER() fungsi memberikan nomor untuk setiap baris. PARTITION BY digunakan untuk memulai penomoran ulang untuk setiap item dalam grup itu, dalam hal ini setiap nilai uniqueid akan mulai penomoran 1 dan naik dari sana. ORDER BY menentukan urutan nomor yang masuk. Karena setiap uniqueid mendapat nomor mulai dari 1, catatan apa pun dengan ROW_NUMBER() lebih besar dari 1 memiliki duplikat uniqueid
Untuk mendapatkan pemahaman tentang bagaimana ROW_NUMBER() fungsi berfungsi, coba saja:
SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table
ORDER BY uniqueid
Anda dapat menyesuaikan logika ROW_NUMBER() berfungsi untuk menyesuaikan rekaman mana yang akan Anda simpan atau hapus.
Misalnya, mungkin Anda ingin melakukan ini dalam beberapa langkah, pertama-tama menghapus catatan dengan nama belakang yang sama tetapi nama depan yang berbeda, Anda dapat menambahkan nama belakang ke PARTITION BY :
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid, col3 ORDER BY col2)'RowRank'
FROM Table)
DELETE FROM cte
WHERE RowRank > 1