Aqui está uma abordagem usando os IDs de linha:
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
)
A subconsulta gera a lista de ids de linha para linhas que não são as últimas em seu grupo (ou seja, todos os registros com o mesmo
par_num ,tran_num
) - o registro mais recente por grupo é identificado usando row_number()
. A consulta externa apenas exclui essas linhas.