sql server窗口函数,累计总和超过一个月

时间:2016-05-31 08:47:17

标签: sql sql-server tsql

只是尝试使用窗口函数对一个月进行累积求和,如下所示。

sum(MeterReading) over (partition by Serial, code order by month(MeterReadingDate)) as cumulative

这似乎是缓慢运行的方式,并且在等待后没有带来任何结果,是否有什么我做错了?

基本上我想查看每个序列/代码的每个月的总和。

2 个答案:

答案 0 :(得分:0)

sum(MeterReading) over (partition by Serial, code, DATEADD(MONTH, DATEDIFF(MONTH, 0, MeterReadingDate), 0) order by MeterReadingDate) as cumulative

DATEADD和DATEDIFF的函数将日期转换为该月的第一天。 然后我将此函数添加到PARTITION以按Serial,Code和Month分组。

答案 1 :(得分:0)

Select 
   serial,
   code, 
   DATEPART(YEAR,MeterReadingDate) as Year,
   DATEPART(MONTH,MeterReadingDate) as Month,
    sum(MeterReading) over (
       partition by 
          Serial, 
          code, 
          Datepart(YEAR,MeterReadingDate),
          Datepart(MONTH,MeterReadingDate)
       ) as cumulative
from table

首先通过claus对订单进行汇总是没有意义的,因为您想要将所有结果一起添加一个月。

其次,添加年份和月份的两个日期部分将对您的数据进行分区,以便总和仅添加一个月的仪表读数。

如果您有兴趣查看每月的年度变化,那么您可以删除Datepart(YEAR,...)并添加一些平均值。