Oracle
 sql >> Base de données >  >> RDS >> Oracle

Supprimer les lignes en double dans Oracle SQL, en laissant les dernières entrées

Voici une approche utilisant les identifiants de ligne :

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 sous-requête génère la liste des identifiants de lignes pour les lignes qui ne sont pas les dernières de leur groupe (c'est-à-dire tous les enregistrements ayant le même par_num ,tran_num ) - l'enregistrement le plus récent par groupe est identifié à l'aide de row_number() . La requête externe supprime simplement ces lignes.