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.