Oracle
 sql >> Database >  >> RDS >> Oracle

Elimina le righe duplicate in Oracle SQL, lasciando le ultime voci

Ecco un approccio che utilizza gli ID riga:

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
    )

La sottoquery genera l'elenco di ID di riga per le righe che non sono le ultime nel loro gruppo (cioè tutti i record che hanno lo stesso par_num ,tran_num ) - il record più recente per gruppo viene identificato utilizzando row_number() . La query esterna elimina semplicemente quelle righe.