2014-01-24 35 views
-1

如果我有從第1周到第52周的數據,並且我想要4周移動平均值,那麼需要1個星期我如何爲此創建SQL查詢?例如,第5周我希望第1周第4周的平均值,第6周我希望第5周第8周的平均值等等。如何在sql中獲取移動平均值

我有一週的列和target_value表A 樣品的數據是這樣的:

Week target_value 
1  20 
2  10 
3  10 
4  20 
5  60 
6  20 

所以我想將5周僅一週1 week4啓動輸出可不能在這之前。 輸出數據看起來就像是:

Week Output 
5  15   (20+10+10+20)/4=15 Moving Average week1-week4 

6  25   (10+10+20+60)/4=25 Moving Average week2-week5 

的數據是在蜂巢但如果是簡單的做到這一點那裏我可以把它移到甲骨文。

+1

請提供模式,樣品數據和期望的輸出。 – RedFilter

+1

哪個數據庫系統,哪個版本? – FrankPl

+0

我現在編輯了我的問題。 – vkaul11

回答

1
SELECT 
    Week, 
    (SELECT ISNULL(AVG(B.target_value), A.target_value) 
    FROM tblA B 
    WHERE (B.Week < A.Week) 
    AND B.Week >= (A.Week - 4) 
    ) AS Moving_Average 
FROM tblA A 

的ISNULL讓你從得到一個空你的第一個星期,因爲沒有周0。如果您希望它是零,然後就離開了ISNULL函數出來。

如果你想讓它開始在第5周而已,然後將下面的行添加到我寫的SQL的末尾:

WHERE A.Week > 4 

結果:

Week Moving_Average 
1  20 
2  20 
3  15 
4  13 
5  15 
6  25