2016-05-31 19 views
0

ちょうど1ヶ月に対して累積合計を行うウィンドウ関数を使用しようとすると、次のようになります。月の累積合計のためのSQLサーバーウィンドウの機能

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

これは実行に時間がかかるようですが、待ってから結果が出ないのですが、間違っていますか?

基本的には、シリアル/コードごとに各月の合計を確認したいと考えています。

+3

何か間違っているかどうかを知るために、完全なクエリ、データサンプル、期待される結果を確認する必要があります。 – sagi

+5

年単位で結果を分割する必要もあります。それ以外の場合は、2015年4月の結果が2016年4月に追加されます。 –

答えて

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

DATEADDおよびDATEDIFF関数は、日付を月の最初の日付に変換します。 次に、PARTITIONにこの機能を追加して、シリアル、コード、月ごとにグループ化します。

+0

この例で行った変更を説明すると役立ちます。 – stevieb

+0

コメントの編集が追加されました。 –

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による注文と合計すると、1か月間のすべての結果を一緒に追加したいので意味がありません。

第2に、年と月の2つの日付部分を追加すると、合計が1か月のメーター読み取り値だけを加算するようにデータが分割されます。

月間変動を確認するには、Datepart(YEAR、...)を削除して平均値を追加してください。