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.