Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. select usbl.user_session_billing_log_id,
  2.        min(least(t4.item_billing_end_date_by_availability,
  3.                  t4.item_billing_end_date_by_expiration_minutes,
  4.                  t4.item_billing_end_date_by_total_minutes)) as expected_end_date
  5. from (
  6.        select usbl.user_session_billing_log_id,
  7.               usbl.billing_date::date
  8.                 + (end_week_minute || ' minutes')::interval
  9.                 + (end_hour || ' hours')::interval
  10.                 + ((case
  11.                       when (end_week_day - (date_part('isodow', usbl.billing_date) - 1)) < 0
  12.                         then (end_week_day - (date_part('isodow', usbl.billing_date) - 1)) + 7
  13.                 end) || ' days')::interval                                         as item_billing_end_date_by_availability,
  14.               usbl.billing_date + ((usbl.item_billing_total_minutes
  15.                 - usbl.item_billing_spent_minutes) ||
  16.                                    ' minutes')::interval                           as item_billing_end_date_by_total_minutes,
  17.               ib.activation_date + (ib.expiration_minutes || ' minutes')::interval as item_billing_end_date_by_expiration_minutes
  18.        from (
  19.               select user_session_billing_log_id,
  20.                      start_week_day,
  21.                      start_hour,
  22.                      start_week_minute,
  23.                      case
  24.                        when end_week_day = 7 then 0
  25.                        else end_week_day
  26.                        end as end_week_day,
  27.                      case
  28.                        when end_week_day = 7 then 0
  29.                        else end_hour
  30.                        end as end_hour,
  31.                      end_week_minute
  32.               from (
  33.                      select user_session_billing_log_id,
  34.                             (s / 60) / 24 as start_week_day,
  35.                             (s / 60) % 24 as start_hour,
  36.                             s % 60        as start_week_minute,
  37.                             (e / 60) / 24 as end_week_day,
  38.                             (e / 60) % 24 as end_hour,
  39.                             e % 60        as end_week_minute
  40.                      from (
  41.                             select min(s) as s, max(e) as e, user_session_billing_log_id
  42.                             from (select s,
  43.                                          e,
  44.                                          max(new_start) over (order by s,e) as left_edge,
  45.                                          user_session_billing_log_id
  46.                                   from (select s,
  47.                                                e,
  48.                                                case when s <= max(le) over (order by s,e) then null else s end as new_start,
  49.                                                user_session_billing_log_id
  50.                                         from (
  51.                                                select s,
  52.                                                       e,
  53.                                                       lag(e) over (order by s,e) as le,
  54.                                                       user_session_billing_log_id
  55.                                                from (
  56.                                                       select p.week_day * 24 * 60 + p.start_hour * 60 + p.start_minute as s,
  57.                                                              p.week_day * 24 * 60 + p.end_hour * 60 + p.end_minute     as e,
  58.                                                              user_session_billing_log_id
  59.                                                       from (
  60.                                                              select avail_period.week_day,
  61.                                                                     avail_period.start_hour,
  62.                                                                     avail_period.start_minute,
  63.                                                                     avail_period.end_hour,
  64.                                                                     avail_period.end_minute,
  65.                                                                     usbl.user_session_billing_log_id
  66.                                                              from mv_user_session_billing_log usbl
  67.                                                                     left join main_item_billing ib on ib.item_billing_id = usbl.item_billing_id
  68.                                                                     left join main_item item on item.item_id = ib.item_id
  69.                                                                     left join main_item_ticket ticket on item.item_ticket_id = ticket.id
  70.                                                                     left join main_ticket_available_period avail_period
  71.                                                                               on ticket.id = avail_period.itm_ticket_id
  72.                                                            ) p
  73.                                                     ) intervals
  74.                                              ) s1
  75.                                        ) s2
  76.                                  ) s3
  77.                             group by left_edge, user_session_billing_log_id
  78.                           ) agg_periods
  79.                    ) t
  80.             ) t3
  81.               join mv_user_session_billing_log usbl on usbl.user_session_billing_log_id = t3.user_session_billing_log_id
  82.               join main_item_billing ib on ib.item_billing_id = usbl.item_billing_id
  83.      ) t4
  84.        right join mv_user_session_billing_log usbl on usbl.user_session_billing_log_id = t4.user_session_billing_log_id
  85. group by usbl.user_session_billing_log_id
  86. ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement