Não vi respostas que usassem expressões comuns de tabela e funções de janela. É com isso que acho mais fácil trabalhar.
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);
Algumas coisas a serem observadas:
1) Estamos apenas checando a duplicação nos campos da cláusula de partição.
2) Se você tiver algum motivo para escolher uma duplicata em detrimento de outras, poderá usar uma cláusula order by para fazer com que essa linha tenha row_number () = 1
3) Você pode alterar o número duplicado preservado alterando a cláusula where final para "Where RN> N" com N> = 1 (eu estava pensando que N = 0 excluiria todas as linhas com duplicatas, mas apenas excluiria todas as linhas) .
4) Adicionado o campo Partição de soma à consulta CTE, que marcará cada linha com o número de linhas no grupo. Portanto, para selecionar linhas com duplicatas, incluindo o primeiro item, use "WHERE cnt> 1".