给定以下示例数据:
数据
Date Sales
----------------------
2011-12-01 122
2011-12-02 433
2011-12-03 213
...
2011-12-31 235
2011-11-01 122
2011-11-02 433
2011-11-03 213
...
2011-11-30 235
2011-10-10 122
2011-10-11 433
2011-10-12 213
...
2011-10-31 235
请注意,10 月的数据从 10 月 10 日开始,而随后的月份则有完整的数据。
我需要获得所有完整月份的平均月销售额,在本例中为 2011 年 11 月和 12 月。
我该怎么做?
最佳答案
SELECT `date`, AVG(`sales`)
FROM sales
GROUP BY YEAR(`date`), MONTH(`date`)
HAVING COUNT(`date`) = DAY(LAST_DAY(`date`));
如果你想限制结果,要么
HAVING ...
ORDER BY `date` DESC LIMIT 3
它应该总是返回最近 3 个月的数据,或者类似的东西
FROM ...
WHERE DATE_FORMAT(CURDATE() - INTERVAL 3 MONTH, '%Y-%m')
<= DATE_FORMAT(`date`, '%Y-%m')
GROUP BY ...
如果有的话,它应该返回前 3 个月的数据。我不确定哪个更好,但我不相信 WHERE
可以在 date
上使用任何索引,如果您使用的是 DATETIME
不要格式化它,你也会比较日期,你不希望这样,
关于mysql获取整月的平均数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12034864/