Vous pouvez DELETE d'un cte :
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table)
DELETE FROM cte
WHERE RowRank > 1
Le ROW_NUMBER() La fonction attribue un numéro à chaque ligne. PARTITION BY est utilisé pour recommencer la numérotation de chaque élément de ce groupe, dans ce cas chaque valeur de uniqueid commencera la numérotation à 1 et remontera à partir de là. ORDER BY détermine l'ordre dans lequel les numéros vont. Puisque chaque uniqueid est numéroté à partir de 1, tout enregistrement avec un ROW_NUMBER() supérieur à 1 a un uniqueid en double
Pour comprendre comment le ROW_NUMBER() fonction fonctionne, essayez-la :
SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table
ORDER BY uniqueid
Vous pouvez ajuster la logique du ROW_NUMBER() fonction pour ajuster quel enregistrement vous allez conserver ou supprimer.
Par exemple, vous aimeriez peut-être le faire en plusieurs étapes, en supprimant d'abord les enregistrements avec le même nom de famille mais des prénoms différents, vous pouvez ajouter le nom de famille à 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