sql - 用于循环日期和汇总数据的 SQL
问题描述
如果 cdate 在 activationdt 和 next_activationdt 内,我需要按客户从 2018-1-1 到今天的特定产品进行总结。当 next_activationdt 为空时,表示它仍在使用中且未取消或更改。
例如 2018-1-1,Mary 和 Alan 正在使用产品 A。
我想不出一个把所有日期一起运行的好方法。
我需要在 SQL 工作台上运行代码,从 AWS 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;
推荐阅读
- javascript - 使用 Google Maps JS API 随机拖动/平移一点
- ios - Xcode 无法在运行 iOS 13 的真实 iOS 设备上构建
- javascript - 在单击按钮时如何显示它已被选中并在表单提交时获取该按钮的 id
- mysql - 当且仅当在同一天发布时,将行显示在彼此之上
- java - Async AssertionError 没有使测试用例失败
- python-3.x - 我无法收到 0x11 之后的任何 HEX 数据
- php - 会计年度更改时自动重置发票编号
- webpack - runtimeChunk 的目的是什么?
- java - 对用户隐藏 Javafx 实现
- python - 如何编码字符串分类数据?