mysql获取整月的平均数据

时间:2012-08-20 09:04:15

标签: mysql sql

给出以下样本数据:

tblData

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月。

我该怎么做?

2 个答案:

答案 0 :(得分:7)

SELECT `date`, AVG(`sales`)
FROM sales
GROUP BY YEAR(`date`), MONTH(`date`)
HAVING COUNT(`date`) = DAY(LAST_DAY(`date`));

Example

如果您想限制结果,

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并且没有格式化它,那么'我也会比较你不想要的日子,

答案 1 :(得分:2)

现在无法测试,但请试试这个:

SELECT 
    DATE_FORMAT(`Date`, '%Y-%m') AS yearMonth,
    SUM(Sales)
FROM
    yourTable
GROUP BY 
    yearMonth
HAVING 
    COUNT(*) = DAY(LAST_DAY(`Date`)