2017-10-20 14 views
1

集計関数のローリング標準偏差を計算しようとしています。SQL集計ウィンドウ

私のデータは、私は以下の通りですが、それは

SELECT [EFFECTIVE_DATE], STDEV(A._SUM) OVER(
PARTITION BY [EFFECTIVE_DATE] 
ORDER BY [EFFECTIVE_DATE] 
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) 
FROM 
(SELECT [EFFECTIVE_DATE], SUM([VALUE_1]*[VALUE_2]) AS '_SUM' 
FROM MY_TABLE 
GROUP BY [EFFECTIVE_DATE]) AS A 

STDEVのために注文した日付とNULLの値を返している今、私は、クエリのために持っているもの、この

EFFECTIVE_DATE VALUE_1 VALUE_2 
    10/10/2000   1   3 
    10/10/2000   2   2 
    10/10/2001   1   1 
    10/10/2001   2   3 

のように見えますテーブル内にSUMVALUE_1VALUE_2を計算するクエリを取得しようとしていて、結果をEFFECTIVE_DATEの順に並べ替えた後、ローリングを計算してくださいそれぞれの前の6期間のEFFECTIVE_DATE

EFFECTIVE_DATE ROLLING_STDEV 
    10/10/2000   1.5   
    10/10/2001   2.5   

私はこれをどのように達成できますか?

答えて

0

実際には、サブクエリ内のGROUP BYPARTITION BY句の必要性を排除します。したがって、PARTITION BY [EFFECTIVE_DATE]行を削除するだけで、目的の結果が返されます。

SELECT [EFFECTIVE_DATE], STDEV(A._SUM) OVER(
ORDER BY [EFFECTIVE_DATE] 
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) 
FROM 
(SELECT [EFFECTIVE_DATE], SUM([VALUE_1]*[VALUE_2]) AS '_SUM' 
FROM MY_TABLE 
GROUP BY [EFFECTIVE_DATE]) AS A