Możesz DELETE z akt:
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table)
DELETE FROM cte
WHERE RowRank > 1
ROW_NUMBER() funkcja przypisuje numer do każdego wiersza. PARTITION BY służy do rozpoczęcia numerowania od nowa dla każdego elementu w tej grupie, w tym przypadku każda wartość uniqueid zacznie numerować od 1 i stamtąd pójdzie w górę. ORDER BY określa, w jakiej kolejności wchodzą liczby. Ponieważ każdy uniqueid jest numerowany od 1, dowolny rekord z ROW_NUMBER() większe niż 1 ma zduplikowany uniqueid
Aby zrozumieć, jak ROW_NUMBER() funkcja działa, po prostu wypróbuj:
SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table
ORDER BY uniqueid
Możesz dostosować logikę ROW_NUMBER() funkcja, aby dostosować rekord, który chcesz zachować lub usunąć.
Na przykład, być może chcesz to zrobić w wielu krokach, najpierw usuwając rekordy z tym samym nazwiskiem, ale różnymi imionami, możesz dodać nazwisko do 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