Je n'ai pas vu de réponses qui utilisent les expressions courantes des tableaux et les fonctions des fenêtres. C'est ce que je trouve le plus facile à utiliser.
DELETE FROM
YourTable
WHERE
ROWID IN
(WITH Duplicates
AS (SELECT
ROWID RID,
ROW_NUMBER()
OVER(
PARTITION BY First_Name, Last_Name, Birth_Date)
AS RN
SUM(1)
OVER(
PARTITION BY First_Name, Last_Name, Birth_Date
ORDER BY ROWID ROWS BETWEEN UNBOUNDED PRECEDING
AND UNBOUNDED FOLLOWING)
AS CNT
FROM
YourTable
WHERE
Load_Date IS NULL)
SELECT
RID
FROM
duplicates
WHERE
RN > 1);
Quelques points à noter :
1) Nous vérifions uniquement les doublons dans les champs de la clause de partition.
2) Si vous avez une raison de choisir un duplicata plutôt que d'autres, vous pouvez utiliser une clause order by pour que cette ligne ait un row_number() = 1.
3) Vous pouvez modifier le nombre de doublons conservés en changeant la clause where finale en "Where RN > N" avec N >= 1 (je pensais que N = 0 supprimerait toutes les lignes qui ont des doublons, mais cela ne ferait que supprimer toutes les lignes).
4) Ajout du champ de partition Sum dans la requête CTE qui marquera chaque ligne avec le nombre de lignes dans le groupe. Donc pour sélectionner les lignes avec des doublons, y compris le premier élément, utilisez "WHERE cnt > 1".