2017-10-20 102 views
1

我想計算一個聚合函數的滾動標準偏差。窗口上的SQL聚合

我的數據是這樣的

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 

現在我有一個查詢是下面,但它返回有序日期和NULL爲STDEV

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 

我的值我試圖通過查詢來計算表EFFECTIVE_DATE中的每個EFFECTIVE_DATESUMVALUE_1VALUE_2,通過EFFECTIVE_DATE命令結果,然後計算滾動對於每個EFFECTIVE_DATE的前6個週期爲。

例如

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

任何想法我可以做到這一點?

回答

0

實際上發現,子查詢中的GROUP BY無需使用PARTITION 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