1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| WITH mission AS (SELECT 1 idmission, 'Lille' villeDepart, 'Nice' villeArrivee, 10 heureDepart, 16 heureArrivee FROM dual),
escale AS ( SELECT 101 idescale, 'Paris' ville, 11 heureArrivee, 1 idmission FROM DUAL
UNION ALL SELECT 201 idescale, 'Marseille' ville, 15 heureArrivee, 1 idmission FROM DUAL
UNION ALL SELECT 301 idescale, 'Clermont-Ferrand' ville, 13 heureArrivee, 1 idmission FROM DUAL
),
vol AS (SELECT 100 idvol, TRUNC(SYSDATE) datevol, 1 idmission FROM dual)
SELECT * --COUNT(DISTINCT idvol)
FROM (
SELECT v.idvol, ','|| m.villeDepart ||'['||m.heureDepart ||'],' ||listagg(e.ville ||'['||e.heureArrivee ||']', ',') WITHIN GROUP (ORDER BY e.heureArrivee) ||','|| m.villeArrivee ||'['||m.heureArrivee ||']' plan_vol
FROM vol v, mission m, escale e
WHERE v.datevol = TRUNC(SYSDATE)
AND m.idmission = v.idmission
AND e.idmission(+) = m.idmission
GROUP BY v.idvol, m.villeDepart,m.heureDepart,m.villeArrivee,m.heureArrivee
)
WHERE plan_vol LIKE '%,'||:ville_depart || '['|| :heure ||']%'
AND INSTR(plan_vol, ','|| :ville_arrivee ||'[') > INSTR(plan_vol, ','|| :ville_depart ||'['||:heure ||']')
IDVOL PLAN_VOL
100 ,Lille[10],Paris[11],Clermont-Ferrand[13],Marseille[15],Nice[16] |