SQL для зацикливания даты и обобщения данных - PullRequest
0 голосов
/ 23 февраля 2019

Мне нужно подвести итоги по клиенту, имеющему конкретный продукт, с 2018-1-1 до сегодняшнего дня, если cdate находится в пределах активацииdd и next_activationdt.Когда next_activationdt пусто, это означает, что оно все еще используется и не отменено или не изменено.

Например, 2018-1-1, Мэри и Алан используют продукт A.

INPUT AND OUTPUT

Я не мог найти хороший способ запуска всех дат вместе.

Мне нужно запустить код в рабочей среде SQL, извлекая данные из базы данных AWS Redshift.

1 Ответ

0 голосов
/ 23 февраля 2019

Вам нужен способ генерации дат.Возможно, у вас есть таблица календаря, или вы можете использовать что-то вроде этого:

with dates as (
      select dateadd(day, row_number() over (), '2018-01-01'::date) as dte
      from t
      limit 365  -- assumes table has at least 365 rows
     )
select d.dte,
       sum( (product = 'A')::int ) as num_a,
       sum( (product = 'B')::int ) as num_b,
       sum( (product = 'C')::int ) as num_c,
       sum( (product = 'D')::int ) as num_d
from dates d left join
     t
     on d.dte >= t.activationdate and
        (d.dte < t.nextactivationdate or t.nextactivationdate is null)
group by d.dte
order by d.dte;
...