Você pode
DELETE de um cte:WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table)
DELETE FROM cte
WHERE RowRank > 1
O
ROW_NUMBER() função atribui um número a cada linha. PARTITION BY é usado para iniciar a numeração para cada item desse grupo, neste caso cada valor de uniqueid começará a numerar em 1 e subirá a partir daí. ORDER BY determina em qual ordem os números vão. Como cada uniqueid é numerado a partir de 1, qualquer registro com um ROW_NUMBER() maior que 1 tem um uniqueid duplicado Para entender como o
ROW_NUMBER() função funciona, apenas experimente:SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table
ORDER BY uniqueid
Você pode ajustar a lógica do
ROW_NUMBER() função para ajustar qual registro você manterá ou removerá. Por exemplo, talvez você queira fazer isso em várias etapas, primeiro excluindo registros com o mesmo sobrenome, mas nomes diferentes, você pode adicionar sobrenome ao
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