协慌网

登录 贡献 社区

MySQL 查询 GROUP BY 按日 / 月 / 年

是否可以做一个简单的查询来计算在确定的时间段(例如年,月或日)中有TIMESTAMP字段的我有多少条记录,例如:

SELECT COUNT(id)
FROM stats
WHERE record_date.YEAR = 2009
GROUP BY record_date.YEAR

甚至:

SELECT COUNT(id)
FROM stats
GROUP BY record_date.YEAR, record_date.MONTH

进行每月统计。

谢谢!

答案

GROUP BY YEAR(record_date), MONTH(record_date)

在 MySQL 中检查日期和时间函数。

GROUP BY <a href="http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html#function_date-format">DATE_FORMAT</a> (record_date, '%Y%m')

注意(首先要注意潜在的下降因素)。目前,这可能不如其他建议有效。尽管如此,我还是将其作为替代方案,也可以用来观察其他解决方案的速度。 (因为您不能真正从快到慢分辨出正确的声音,直到您看到差异为止。)而且,随着时间的流逝,可以对 MySQL 的引擎进行优化方面的更改,以便在某些情况下(例如,并非如此)做出此解决方案。远点),使其在效率上可以与大多数其他同类产品相提并论。

试试这个

SELECT COUNT(id)
FROM stats
GROUP BY EXTRACT(YEAR_MONTH FROM record_date)

EXTRACT(unit FROM date)函数比较好,因为使用的分组较少,并且该函数返回数字值。

分组时的比较条件将比 DATE_FORMAT 函数(返回字符串值)快。尝试使用返回 SQL 比较条件(WHERE,HAVING,ORDER BY,GROUP BY)的非字符串值的 function | field。