No vi ninguna respuesta que use expresiones de tabla comunes y funciones de ventana. Esto es con lo que me resulta más fácil trabajar.
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);
Algo a tener en cuenta:
1) Solo estamos verificando la duplicación en los campos de la cláusula de partición.
2) Si tiene alguna razón para elegir un duplicado sobre otros, puede usar una orden por cláusula para hacer que esa fila tenga row_number () = 1
3) Puede cambiar el número duplicado conservado cambiando la cláusula where final a "Where RN> N" con N> = 1 (estaba pensando que N = 0 eliminaría todas las filas que tienen duplicados, pero simplemente eliminaría todas las filas) .
4) Se agregó el campo Suma partición a la consulta CTE que etiquetará cada fila con las filas de números en el grupo. Entonces, para seleccionar filas con duplicados, incluido el primer elemento, use "WHERE cnt> 1".