Сначала группируйте данные по бронированию и рейсу, затем на следующем шаге только по бронированию. Таким образом, вы можете найти все необходимые значения:
select reservation, listagg(flight, '-') within group (order by mnd) flights,
min(orig) keep (dense_rank first order by r1) || ' - '
|| min(dest) keep (dense_rank first order by r1) as ini_rt,
min(orig) keep (dense_rank first order by r2) || ' - '
|| min(dest) keep (dense_rank first order by r2) as end_rt,
min(o1) keep (dense_rank first order by r1) || ' - '
|| min(o2) keep (dense_rank first order by r2) as route,
min(mnd) dep_dt, max(mxd) arr_dt
from (
select reservation, flight,
min(orig) keep (dense_rank first order by dt) orig,
min(dest) keep (dense_rank last order by dt) dest,
row_number() over (order by min(dt)) r1,
row_number() over (order by min(dt) desc) r2,
min(passen_ori) keep (dense_rank first order by dt) o1,
min(passen_dest) keep (dense_rank last order by dt) o2,
min(dt) mnd, max(dt) mxd
from flights
group by reservation, flight )
group by reservation
dbfiddle