如果我有第1周到第52周数据的数据,并且我希望4周移动平均值为1周,我该如何为此进行SQL查询?例如,对于第5周,我想要第1周 - 第4周的平均值,第6周我想要第5周 - 第8周的平均值,依此类推。
我在表A中有列周和target_value。 样本数据如下:
Week target_value
1 20
2 10
3 10
4 20
5 60
6 20
所以我想要的输出将从第5周开始,因为在此之前只有第1周的第4周可用。 输出数据如下所示:
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
数据在蜂巢中但我可以将它移动到oracle如果在那里更简单。
答案 0 :(得分: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
由于没有第0周,ISNULL会阻止你获得第一周的null。如果你想让它为null,那么只需要退出ISNULL函数。
如果您希望它仅在第5周开始,那么将以下行添加到我写的SQL的末尾:
WHERE A.Week > 4
结果:
Week Moving_Average
1 20
2 20
3 15
4 13
5 15
6 25