Du kan DELETE fra en 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() funktion tildeler et nummer til hver række. PARTITION BY bruges til at starte nummereringen forfra for hvert element i den gruppe, i dette tilfælde hver værdi af uniqueid vil begynde at nummerere ved 1 og gå op derfra. ORDER BY bestemmer hvilken rækkefølge tallene går i. Da hver uniqueid bliver nummereret fra 1, enhver post med en ROW_NUMBER() større end 1 har en dublet uniqueid
For at få en forståelse af, hvordan ROW_NUMBER() funktionen virker, bare prøv den:
SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table
ORDER BY uniqueid
Du kan justere logikken i ROW_NUMBER() funktion til at justere, hvilken registrering du vil beholde eller fjerne.
For eksempel vil du måske gerne gøre dette i flere trin, først at slette poster med det samme efternavn, men forskellige fornavne, du kan tilføje efternavn til 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