[英]How to calculate a moving 4 week average every week in MySQL
我有一张这样的桌子。
count | date ------------------ 1 2012-01-01 4 2012-01-01 5 2012-01-02 12 2012-01-03 7 2012-01-04 4 2012-01-05 19 2012-01-06 1 2012-01-07 etc...
我正在寻找一种方法来计算每周前4周内每周的平均计数。
结果应该像...
avg | yearweek ------------------ 3 201201 5 201202 6 201203 1 201204 11 201205 3 201206 18 201207 12 201208 etc...
...每年的周数是过去4年中的每周平均值。
获取每周平均值很简单,但是在过去的4年中如何获得平均值? 然后,如何将其作为滚动平均值呢? 我最好只在代码中这样做吗?
尽管您当然可以在应用程序的代码中执行此操作,但是如果您确实需要在SQL中执行此操作,则可以首先创建按周汇总的结果表,然后将其与自身连接以获取4周移动平均值。
这样做时,我将存储总和和天数(而不是存储平均值)(考虑到边缘情况,一年的第一周或最后一周可能没有7天)。 这样,当平均值的分母不同时,您将避免计算未加权的平均值。
因此,假设您有一个表“ weekly_results”,其中包含字段:yearweek,sumcount和numdays。 现在,您可以自我加入最近的4周,获取总数和计数,然后从中计算平均值:
SELECT yearweek, sum_cnt/sum_dys as avg_moving_4wk
FROM (
SELECT a.yearweek, sum(b.sumcount) as sum_cnt, sum(b.numdays) as sum_dys
FROM weekly_results a
join weekly_results b
on a.yearweek - b.yearweek <4 and a.yearweek - b.yearweek >=0
GROUP BY a.yearweek
) t1
GROUP BY yearweek
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.