AUTOMATIC1111

Untitled

Mar 1st, 2018
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. with
  2.     rawdates(date) as (select generate_series(date_a,date_b, interval '1 day')::date),
  3.     dates(date,daycode) as (select date,(extract('month' from date)*100 + extract('day' from date))::integer as daycode from rawdates),
  4.     daycodes_array(daycodes_array) as (select array_agg(daycode) from dates),
  5.     matching_schedules(id_schedule,daycodes) as(
  6.         select
  7.             id_schedule,
  8.             array(select unnest(calendar_array) intersect select unnest(daycodes_array))
  9.         from
  10.             XXXX.schedule,
  11.             daycodes_array
  12.         where
  13.             calendar_array && daycodes_array and
  14.             (
  15.                 (date_a>=date_start and date_a<date_end) or
  16.                 (date_b>=date_start and date_b<date_end) or
  17.                 (date_start>=date_a and date_start<date_b)
  18.             )
  19.  
  20.     ),
  21.     unnested_schedules(id_schedule,daycode) as(select id_schedule,unnest(daycodes) from matching_schedules)
  22. select
  23.     id_schedule,
  24.     id_train,
  25.     n1,
  26.     date+time_departure as date_departure
  27. from
  28.     unnested_schedules join
  29.     dates using(daycode) join
  30.     XXXX.schedule using(id_schedule) join
  31.     XXXX.train using(id_train)
  32. where
  33.     date>=date_start and
  34.     date<date_end and
  35.     date+time_departure >= date_a and
  36.     date+time_departure < date_b
  37. order by
  38.     1,2 asc
Advertisement
Add Comment
Please, Sign In to add comment