SQL用于循环日期和汇总数据

时间:2019-02-23 03:47:27

标签: sql pivot amazon-redshift

如果cdate在Activationdt和next_activationdt之内,我需要按客户总结从2018-1-1到今天的特定产品。当next_activationdt为空时,表示它仍在使用中,没有被取消或更改。

例如2018-1-1,Mary和Alan使用的是产品A。

INPUT AND OUTPUT

我想不出一种将所有日期放在一起的好方法。

我需要在SQL工作台上运行代码,以从AWS Redshift数据库中提取数据。

1 个答案:

答案 0 :(得分:0)

您需要一种生成日期的方法。也许您有一个日历表,或者可以使用类似以下的内容:

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;