上一篇讲了用tableau的实现方法Tableau实现累加多少天求和rolling_sum()
这一篇写一下用SQL的方法实现.主要有两个方法:
方法一: 用开窗函数
要实现当前月份和之前2个月的数据相加,代码很简单,直接使用over函数和 rows between n preceding and n following
就可以了。
代码:
SELECT [salesdate]
,[Region]
,sale
,sum(sale)over(order by salesdate,region rows BETWEEN 2 preceding AND CURRENT ROW)--2 following
FROM [Rollingtest]
where salesdate <'20190110'
效果:
如果要求移动平均,那就再除以对应的天数就可以了
方法二:用自相关
用这个方法跑起来速度相对比较慢,但是适合那些没有开窗函数的数据库,比如mysql旧版本之类的
代码:
SELECT a.salesdate,sum(a.sales) sales
,(select sum(rs.sales) from #test1 rs
where rs.salesdate<=a.salesdate
)rollingsales
FROM #test1 a
group by a.salesdate
order by a.salesdate
效果: