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