繁体   English   中英

如何在MySQL中每周计算移动的4周平均值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM