MS SQL实时累计流量,得到日、月、年累计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MS SQL实时累计流量,得到日、月、年累计相关的知识,希望对你有一定的参考价值。

如题,2个流量值M1,M2,每时每刻都在不断累计增加,如今想得到每天的累计、每月的累计、每年的累计,并可以随时查看。
这个是不是用存储过程比较好实现?每个凌晨减去上一个凌晨,写入一个表。每个月1日凌晨减去上个月1日凌晨,写入一个表。每年1月1日凌晨减去上一年1月1日凌晨,写入一个表。
这个思路对不对?怎么实现啊,比如用什么函数,或者有之类实例?谢谢了!

--直接可以累计出来,时间字段为datetime格式
--比如获取当前时间一天累计
select sum(M1) M1合计,sum(M2) M2合计,sum(isnull(M1,0)+isnull(M2,0)) 总合计 from 表名 where 时间字段<getdate()  and 时间字段> dateadd(day,-1,getdate())

--比如获取当前时间一月累计  
select sum(M1) M1合计,sum(M2) M2合计,sum(isnull(M1,0)+isnull(M2,0)) 总合计 from 表名 where 时间字段<getdate()  and 时间字段> dateadd(month,-1,getdate()) 

--比如获取当前时间一年累计
select sum(M1) M1合计,sum(M2) M2合计,sum(isnull(M1,0)+isnull(M2,0)) 总合计 from 表名 where 时间字段<getdate()  and 时间字段> dateadd(year,-1,getdate())

参考技术A 用存储过程,你的思路,没有问题。但不能确定。因为对你的表存储不清楚。本回答被提问者采纳

SQL-Partition by

统计每个月,每个地区,用户缴费的月总计,年累计。

既然有月总计,年累计,应该就是先统计出月总计的数据,再用partition by 做年累计。

但是忘记了一个前提,切片的维度:月,地区,不一定每个月都存在(如果放大到地区,应该是每个月都存在的)。如果是这样,年累计就会出现问题,比如一个用户,这个月没有交费,但是前几个月是有交费的,那这个用户在这个月是有年累计数据。但是年累计数据是在月统计数据基础上,如果没有月数据,也不存在年累计数据。

对于这样的情况,就不能红切片来解决。

可以建一个月份表,跟实际的缴费数据left join 关联。月份表,与实际缴费数据关联,一个月份,对应这个月份及之前所有的月份的缴费数据。用SUM来统计结果。

 

以上是关于MS SQL实时累计流量,得到日、月、年累计的主要内容,如果未能解决你的问题,请参考以下文章

各年时间累计(R)

SQL-Partition by

老男孩教育每日一题-2017年3月28日-awk累计相加

累计动态地对每个月的字段求和

如何实时计算日累计逐单资金流

sql 分组 求累计值