2017-10-20 141 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