我有一个列为date
、col_a
、col_b
、value
的表。
我正试图在value
上做一个滚动求和,窗口为7。问题是,我们不能保证对于所有可能的列组合,我们将有一个连续的日期序列。所以,当计算最后7天的总和时,对于列的组合,可能只有3天(日期(。解决方案是,我们可以假设value
列的缺失日期为0。
我尝试过一个查询,它为一个日期创建了一个滚动汇总表-
select col_a, col_b, sum(value), '2019-12-19' as foo
from schema_a.table_b
where to_date(event_date, 'yyyy-mm-dd') < to_date('2019-12-26', 'yyyy-mm-dd') and to_date(event_date, 'yyyy-mm-dd') > to_date('2019-12-19', 'yyyy-mm-dd')
group by col_a, col_b
我现在必须为从最小到最大的所有唯一日期做
我应该进行循环,还是有更好的方法来处理这种情况,因为这似乎是一个相当常见的用例。
在熊猫身上,我们可以很容易地进行插补和rolling_sum。
使用GENERATE_DATES
,然后左键将实际数据连接到此表。用0填充任何NULLS,并计算滚动和。