首页 > 解决方案 > 用于循环日期和汇总数据的 SQL

问题描述

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

例如 2018-1-1,Mary 和 Alan 正在使用产品 A。

输入和输出

我想不出一个把所有日期一起运行的好方法。

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

标签: sqlpivotamazon-redshift

解决方案


您需要一种生成日期的方法。也许你有一个日历表,或者你可以使用这样的东西:

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;

推荐阅读