我一直在阅读几篇关于在
mysql查询中估算移动平均值的帖子,但是看起来我的情况稍微有些困难,因为该表不包含我想要计算平均值的列.我需要计算每个组的行数,并显示该组的移动平均值.
我在表中基本上只有一列相关性,这是DATETIME列.该表可以包含多个具有相同日期的行.我想按YEARWEEK对表进行分组,并为每个YEARWEEK组分组COUNT(*)行数.这很容易,困难的部分是另外计算移动的4周平均值
+-------------+
| DatoLagtTil |
+-------------+
| 2012-11-01 |
| 2012-10-25 |
| 2012-10-25 |
| 2012-10-11 |
| 2012-10-04 |
| ... |
| ... |
| ... |
| ... |
+-------------+
这是我想要创建的输出表 – 4周(YEARWEEK)移动平均线是困难的部分(注意:下面的示例不是基于上面的示例数据)
+------------+------------+-----------+
| YEARWEEK | COUNT | m_average |
+------------+------------+-----------+
| 201201 | 5 | 5 |
| 201202 | 10 | 7.5 |
| 201203 | 5 | 6.6 |
| 201204 | 15 | 8.8 |
| 201205 | 10 | 10 |
| 201206 | 5 | 8.8 |
| 201207 | 5 | 8.8 |
+------------+------------+-----------+
我找到了几个很好的资料来解释如何计算移动平均线,但是我无法让它们在我的情况下工作.我希望你们能提供帮助.
谢谢
– -状态更新 – –
自从我发布这个问题以来,我一直在尝试一些解我觉得我越来越近了,但仍然有一些必要的缺失.
通过下面的查询我得到没有错误,但是我的所有YEARWEEK组都得到了太高的Count(k.DatoLagtTil)和相同的AVG(cnt)…我相信这与WHERE子句I有关’正在使用
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
在sqlfiddle上看到它.