1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| SQL> WITH traject AS (
SELECT 1 AS trajet_id,'8:00' AS arrival_time,'8:05' AS departure_time,'ARRET 1' AS stop_id FROM dual UNION ALL
SELECT 1,'8:10','8:20','ARRET 2' FROM dual UNION ALL
SELECT 2,'8:00','8:05','ARRET 1' FROM dual UNION ALL
SELECT 2,'8:10','8:20','ARRET 2' FROM dual UNION ALL
SELECT 3,'8:20','8:25','ARRET 1' FROM dual
),
aggreg_trajet as (
SELECT trajet_id
, listagg(arrival_time ||'-'|| departure_time ||':'|| stop_id, '#') WITHIN GROUP (ORDER BY arrival_time) lst
FROM traject
GROUP BY trajet_id
),
liste_trajet_identique as (
SELECT lst
, listagg(trajet_id, ' ') WITHIN GROUP (ORDER BY trajet_id) lst_id
, row_number() over(order by lst) as grp
FROM aggreg_trajet
GROUP BY lst
)
select l.grp, t.*
from traject t
join liste_trajet_identique l
on instr(l.lst_id, t.trajet_id) > 0;
GRP TRAJET_ID ARRI DEPA STOP_ID
---------- ---------- ---- ---- -------
1 1 8:00 8:05 ARRET 1
1 1 8:10 8:20 ARRET 2
1 2 8:00 8:05 ARRET 1
1 2 8:10 8:20 ARRET 2
2 3 8:20 8:25 ARRET 1
SQL> |
Partager