Advertisement
Guest User

Untitled

a guest
Jan 14th, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- PostgreSQL
  2.  
  3. -- FUNCTIONS
  4. CREATE OR REPLACE FUNCTION f_get_schedule_by_date(my_flight_date DATE)
  5. RETURNS TABLE(
  6.   flight_number INTEGER,
  7.   flight_date DATE,
  8.   dept_country CHAR(2),
  9.   dept_city VARCHAR(20),
  10.   dept_time TIME,
  11.   arrv_country CHAR(2),
  12.   arrv_city VARCHAR(20),
  13.   arrv_time TIME
  14. )
  15. AS $$
  16.   SELECT
  17.     f.flight_number,
  18.     f.flight_date,
  19.     s.dept_country,
  20.     s.dept_city,
  21.     s.dept_time,
  22.     s.arrv_country,
  23.     s.arrv_city,
  24.     s.arrv_time
  25.   FROM
  26.     flights f
  27.   INNER JOIN
  28.     schedules s ON (f.flight_number = s.flight_number)
  29.   WHERE
  30.     f.flight_date = my_flight_date
  31. $$ LANGUAGE SQL;
  32.  
  33. SELECT *
  34. FROM f_get_schedule_by_date('2018-01-14')
  35.  
  36. SELECT *
  37. FROM f_get_schedule_by_date('2012-05-23')
  38.  
  39.  
  40. CREATE OR REPLACE FUNCTION f_get_passengers_between_dates(my_airline_code CHAR(2), start_date DATE, end_date DATE)
  41. RETURNS BIGINT
  42. AS $$
  43.   SELECT
  44.     COALESCE(SUM(occ_econ_cap + occ_buss_cap), 0)
  45.   FROM
  46.     flights
  47.   WHERE
  48.     airline_code = my_airline_code AND
  49.     start_date <= flight_date AND
  50.     end_date >= flight_date
  51. $$ LANGUAGE SQL;
  52.  
  53. SELECT *
  54. FROM f_get_passengers_between_dates('AA', '2017-12-14', '2018-01-14');
  55.  
  56.  
  57. CREATE OR REPLACE FUNCTION f_get_begin_date()
  58. RETURNS DATE
  59. AS $$
  60.   SELECT (date_trunc('month', now()) - interval '1 month')::DATE
  61. $$ LANGUAGE SQL;
  62.  
  63. SELECT f_get_begin_date()
  64.  
  65.  
  66. CREATE OR REPLACE FUNCTION f_get_end_date()
  67. RETURNS DATE
  68. AS $$
  69.   SELECT (date_trunc('month', now()) - interval '1 day')::DATE
  70. $$ LANGUAGE SQL;
  71.  
  72. SELECT f_get_end_date()
  73.  
  74.  
  75. -- VIEW
  76. CREATE OR REPLACE VIEW v_Schedule_Since_Last_Month AS
  77.   SELECT
  78.     a.name,
  79.     s.*,
  80.     f_get_passengers_between_dates(a.code, f_get_begin_date(), f_get_end_date()) AS passengers_last_month
  81.   FROM
  82.     airlines a
  83.   INNER JOIN
  84.     flights f ON (a.code = f.airline_code)
  85.   INNER JOIN
  86.     f_get_schedule_by_date(now()::DATE) s ON (f.flight_number = s.flight_number);
  87.  
  88. SELECT *
  89. FROM v_Schedule_Since_Last_Month;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement