Ето един подход, използващ идентификаторите на редовете:
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
)
Подзаявката генерира списък с идентификатори на редове за редове, които не са най-новите в своята група (т.е. всички записи, имащи един и същ par_num ,tran_num
) - най-новият запис за група се идентифицира с помощта на row_number()
. Външната заявка просто изтрива тези редове.