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