Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Excluir linhas duplicadas no Oracle SQL, deixando as entradas mais recentes


Aqui está uma abordagem usando os IDs de linha:
delete from transaction
where 
    last_update = date '2020-03-01'
    and rowid in (
        select rid
        from (
            select 
                rowid rid, 
                row_number() over(partition by par_num ,tran_num order by last_update desc) rn
            from transaction                
        ) t
        where rn > 1
    )

A subconsulta gera a lista de ids de linha para linhas que não são as últimas em seu grupo (ou seja, todos os registros com o mesmo par_num ,tran_num ) - o registro mais recente por grupo é identificado usando row_number() . A consulta externa apenas exclui essas linhas.