Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL移动平均值-4周_Mysql_Moving Average - Fatal编程技术网

MySQL移动平均值-4周

MySQL移动平均值-4周,mysql,moving-average,Mysql,Moving Average,我已经读了几篇关于在mysql查询中估计移动平均值的文章,但是我的情况似乎稍微有点困难,因为表中没有我想要计算平均值的列。我需要计算每个组的行数,并给出该组的移动平均数 我在表中基本上只有一列相关,那就是DATETIME列。该表可以包含多个日期相同的行。我想按YEARWEEK对表进行分组,并计算(*)每个YEARWEEK组的行数。这是容易的,困难的部分是还要计算移动4周平均数 +-------------+ | DatoLagtTil | +-------------+ | 2012-11-01

我已经读了几篇关于在mysql查询中估计移动平均值的文章,但是我的情况似乎稍微有点困难,因为表中没有我想要计算平均值的列。我需要计算每个组的行数,并给出该组的移动平均数

我在表中基本上只有一列相关,那就是DATETIME列。该表可以包含多个日期相同的行。我想按YEARWEEK对表进行分组,并计算(*)每个YEARWEEK组的行数。这是容易的,困难的部分是还要计算移动4周平均数

+-------------+
| DatoLagtTil |
+-------------+
| 2012-11-01  |
| 2012-10-25  |
| 2012-10-25  |
| 2012-10-11  |
| 2012-10-04  |
| ...         |
| ...         |
| ...         |
| ...         |
+-------------+
这是我希望创建的输出表-4周(YEARWEEK)移动平均线是困难的部分(注意:下面的示例不是基于上面的样本数据)

我已经找到了一些很好的资料来解释如何计算移动平均线,但是我无法让它们在我的案例中发挥作用。我希望你们能帮忙

谢谢

---状态更新---

自从我发布这个问题以来,我一直在尝试一些解决方案。我觉得我离得越来越近了,但仍然缺少一些基本的东西

通过下面的查询,我没有得到任何错误,但是我得到的计数(k.DatoLagtTil)太高,所有YEARWEEK组的平均值(cnt)都相同。。。我相信这与我使用的WHERE子句有关

SELECT YEARWEEK(k.DatoLagtTil), COUNT(k.DatoLagtTil), AVG(cnt)
  FROM  Kunder_db k, (SELECT COUNT(*) AS cnt
          FROM Kunder_db
         WHERE YEARWEEK(DatoLagtTil) BETWEEN YEARWEEK(DatoLagtTil) - 3 AND YEARWEEK(DatoLagtTil)
        GROUP BY YEARWEEK(DatoLagtTil)) x
GROUP BY YEARWEEK(k.DatoLagtTil)

只需使用合适的范围条件,再次将计数查询与表连接:

SELECT   t.yearweek,
         t.count,
         COUNT(*) / 4 AS m_average

FROM     my_table JOIN (
  SELECT   YEARWEEK(DatoLagtTil) AS yearweek,
           COUNT(*) AS count
  FROM     my_table
  GROUP BY yearweek
) t ON t.yearweek BETWEEN YEARWEEK(DatoLagtTil)
                      AND YEARWEEK(DatoLagtTil + INTERVAL 3 week)

GROUP BY t.yearweek

请参见。

如果在前4周内没有一周的记录,该周是否仍应包括在移动平均线中(隐含计数为0)?也就是说,在您的示例中,
201201
的平均值不应该为1.25,
201202
的平均值不应该为3.75,等等?这似乎非常有效。我将进一步测试它,但它似乎是正确的:)谢谢
SELECT   t.yearweek,
         t.count,
         COUNT(*) / 4 AS m_average

FROM     my_table JOIN (
  SELECT   YEARWEEK(DatoLagtTil) AS yearweek,
           COUNT(*) AS count
  FROM     my_table
  GROUP BY yearweek
) t ON t.yearweek BETWEEN YEARWEEK(DatoLagtTil)
                      AND YEARWEEK(DatoLagtTil + INTERVAL 3 week)

GROUP BY t.yearweek