SQL VERTICA работает суммы 30/60/90 дней - PullRequest
0 голосов
/ 11 октября 2018

Привет, у меня есть две таблицы со многими отношениями ко многим

enter image description here

и как результаты я хочу для каждой записи в таблице скоринга (поэтому id_case и id_date) Я хотел бы видеть сумму транзакций от scoring.id_date до scoring.id_date + 30 дней, +60 дней и т. Д.

Это то, что я дошел до сих пор, но оно вообще не работает:

  with t as  (select id_case,id_date,amount 
                    from TableTransactions 
                     ) 


            SELECT id_case,f.id_date,
                   sum(case when exists (select * from t t where t.id_case=f.id_case and t.id_date between f.id_date and (to_char(date(cast( f.id_date as varchar(8))) + 360, 'YYYYMMDD'))::int ) then t.amount else 0 end )  as Days360

            from TableScoring f

1 Ответ

0 голосов
/ 11 октября 2018

Я думаю, что это join с условной агрегацией:

select s.id_case, s.id_date,
       sum(case when t.id_date >= s.id_date and t.id_date < s.id_date + interval '30 day'
                then t.amount else 0
           end) as amount_30,
       sum(case when t.id_date >= s.id_date and t.id_date < s.id_date + interval '60 day'
                then t.amount else 0
           end) as amount_60,
       sum(case when t.id_date >= s.id_date and t.id_date < s.id_date + interval '90 day'
                then t.amount else 0
           end) as amount_90
from scoring s join
     transactions t
     on t.id_case = s.id_case
group by s.id_case, s.id_date;
...