DatabaseProgramming: ConnectingFlights.sql

File ConnectingFlights.sql, 1.5 KB (added by 231044, 6 days ago)
Line 
1create 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 $$
15begin
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';
45end;
46$$ language plpgsql;
47
48