Если идея состоит в том, чтобы удалить все дубликаты par_num
/ tran_num
, кроме последнего в каждом наборе, упорядоченном по last_update
, то это должно сделать это:
delete transaction_list
where rowid in
( select lag(rowid)
over (partition by par_num, tran_num order by last_update)
from transaction_list );
DBFiddle
Объяснение: lag
возвращает значение из предыдущей строки (или другой более ранней строки - вы можете указать все виды логики смещения c, если хотите, но здесь мы просто хочу предыдущий ряд). Предложение over()
определяет порядок и порядок окон. В этом случае мы хотим упорядочить каждый набор комбинаций par_num
/ tran_num
на last_update
и удалить предыдущую строку. Раздел partition by
означает, что порядок сбрасывается для каждой комбинации par_num
/ tran_num
, поэтому у каждой группы есть «последняя» строка, которая не будет удалена.