Puedes DELETE de un cte:
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table)
DELETE FROM cte
WHERE RowRank > 1
El ROW_NUMBER() función asigna un número a cada fila. PARTITION BY se usa para comenzar la numeración de cada elemento en ese grupo, en este caso cada valor de uniqueid comenzará a numerarse en 1 y subirá desde allí. ORDER BY determina en qué orden van los números. Dado que cada uniqueid se numera a partir del 1, cualquier registro con un ROW_NUMBER() mayor que 1 tiene un uniqueid duplicado
Para comprender cómo ROW_NUMBER() la función funciona, solo pruébela:
SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table
ORDER BY uniqueid
Puede ajustar la lógica del ROW_NUMBER() función para ajustar qué registro mantendrá o eliminará.
Por ejemplo, tal vez le gustaría hacer esto en varios pasos, primero eliminando registros con el mismo apellido pero diferentes nombres, podría agregar el apellido a la 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