2017-10-20 53 views
1

J'essaie de calculer l'écart-type glissant d'une fonction agrégée.SQL Aggregate Over Window

Mes données se présente comme suit

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 

En ce moment ce que j'ai pour une requête est au-dessous, mais il est de retour les dates ordonnées et une valeur de NULL pour la 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 

I J'essaie d'obtenir la requête pour calculer le SUM de et VALUE_2 pour chaque EFFECTIVE_DATE dans la table, classer les résultats par EFFECTIVE_DATE, puis de calculer le roulement STDEV pour les 6 périodes précédentes pour chaque EFFECTIVE_DATE.

par exemple.

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

Des idées comment je peux accomplir cela?

Répondre

0

En fait, le GROUP BY de la sous-requête élimine le besoin d'une clause PARTITION BY. Il suffit donc de supprimer la ligne PARTITION BY [EFFECTIVE_DATE] pour obtenir le résultat souhaité.

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