SQL server求移动平均、rolling sum滚动前多少行求和

10 篇文章 1 订阅

上一篇讲了用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

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值