一个SQL解决历史累计、当月累计和当日明细

发布时间 2023-08-25 11:30:26作者: soccerchen

最近刚好接到了这样一个需求,就是标题所示的要在报表中展示截止到业务日期时的历史累计值、当月累计值和当日值。

数据首先是处理到这样的模型中:业务日期(biz_date)、当日增量统计值(cnt)

SQL如下:

select biz_date,--业务日期
       cnt,--当日统计值
	   sum(cnt) over(order by biz_date asc) as cnt_all,--历史累计统计值
	   sum(cnt) over(partition by substr(biz_date,1,7) order by biz_date asc) as cnt_m--当月统计值
from tab
where pt='${bizdate}';

  本人回想起刚工作时的做法是用不同维度的group by值去关联得到的这个结果,现在看起来可以有一种简单且方便理解记忆的写法,就记录一下。

这里其实是开窗函数的灵活使用,很多复杂的数据处理都可以先考虑一下开窗可不可以做,再去确定对需求的技术方案。