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