Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Löschen Sie doppelte Zeilen in Oracle SQL und belassen Sie die neuesten Einträge

Hier ist ein Ansatz, der die Zeilen-IDs verwendet:

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
    )

Die Unterabfrage generiert die Liste der Zeilen-IDs für Zeilen, die nicht die neuesten in ihrer Gruppe sind (dh alle Datensätze mit demselben par_num ,tran_num). ) - Der neueste Datensatz pro Gruppe wird mit row_number() identifiziert . Die äußere Abfrage löscht nur diese Zeilen.