| 1 | create or replace function ConnectingFlight(
|
|---|
| 2 | DepartureCode char(3),
|
|---|
| 3 | ArrivalCode char(3),
|
|---|
| 4 | Date date
|
|---|
| 5 | ) returns table (
|
|---|
| 6 | flight1_Number varchar(6),
|
|---|
| 7 | flight1_Departure timestamp,
|
|---|
| 8 | flight1_Arrival timestamp,
|
|---|
| 9 | connection char(3),
|
|---|
| 10 | layoverMinutes int,
|
|---|
| 11 | flight2_Number varchar(6),
|
|---|
| 12 | flight2_Departure timestamp,
|
|---|
| 13 | flight2_Arrival timestamp
|
|---|
| 14 | ) as $$
|
|---|
| 15 | begin
|
|---|
| 16 | return query
|
|---|
| 17 |
|
|---|
| 18 | with route as (
|
|---|
| 19 | select f.id, f.flightnumber, f.departure, f.arrival, dep_a.code as dep_code,
|
|---|
| 20 | ar_a.code as arr_code
|
|---|
| 21 | from flight as f
|
|---|
| 22 | join gate as dep_g on f.actualgatedepartureid = dep_g.id
|
|---|
| 23 | join terminal as dep_t on dep_g.terminalid = dep_t.id
|
|---|
| 24 | join airport as dep_a on dep_t.airportid = dep_a.id
|
|---|
| 25 | join gate as ar_g on f.actualgatearrivalid = ar_g.id
|
|---|
| 26 | join terminal as ar_t on ar_g.terminalid = ar_t.id
|
|---|
| 27 | join airport as ar_a on ar_t.airportid = ar_a.id
|
|---|
| 28 | )
|
|---|
| 29 | select
|
|---|
| 30 | f1.flightnumber,
|
|---|
| 31 | f1.departure,
|
|---|
| 32 | f1.arrival,
|
|---|
| 33 | f1.arr_code,
|
|---|
| 34 | (extract(epoch from (f2.departure - f1.arrival)) / 60)::int,
|
|---|
| 35 | f2.flightnumber,
|
|---|
| 36 | f2.departure,
|
|---|
| 37 | f2.arrival
|
|---|
| 38 | from route as f1
|
|---|
| 39 | join route as f2 on f1.arr_code = f2.dep_code
|
|---|
| 40 | where f1.dep_code = DepartureCode and
|
|---|
| 41 | f2.arr_code = ArrivalCode and
|
|---|
| 42 | f1.departure::date = Date and
|
|---|
| 43 | f2.departure >= f1.arrival + INTERVAL '1 hour' and
|
|---|
| 44 | f2.departure <= f1.arrival + INTERVAL '16 hours';
|
|---|
| 45 | end;
|
|---|
| 46 | $$ language plpgsql;
|
|---|
| 47 |
|
|---|
| 48 |
|
|---|