Ich habe keine Antworten gesehen, die allgemeine Tabellenausdrücke und Fensterfunktionen verwenden. Dies ist das, womit ich am einfachsten arbeiten kann.
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);
Zu beachten:
1) Wir prüfen nur, ob die Felder in der Partitionsklausel doppelt vorhanden sind.
2) Wenn Sie einen Grund haben, ein Duplikat gegenüber anderen auszuwählen, können Sie eine order by-Klausel verwenden, damit diese Zeile row_number () = 1 hat
3) Sie können das beibehaltene Nummernduplikat ändern, indem Sie die letzte where-Klausel in "Where RN> N" mit N> = 1 ändern (ich dachte, N = 0 würde alle Zeilen mit Duplikaten löschen, aber nur alle Zeilen) .
4) Dem Feld Summenpartition wurde die CTE-Abfrage hinzugefügt, die jede Zeile mit den Zahlenzeilen in der Gruppe kennzeichnet. Um also Zeilen mit Duplikaten auszuwählen, einschließlich des ersten Elements, verwenden Sie "WHERE cnt> 1".