如何在sql中获得移动平均值

时间:2014-01-24 18:40:58

标签: sql hive

如果我有第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如果在那里更简单。

1 个答案:

答案 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
相关问题