是否可以做一个简单的查询来计算我在一个确定的时间段内有多少记录,比如一年,一个月,或者一天,有一个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
每月进行统计。
谢谢!
是否可以做一个简单的查询来计算我在一个确定的时间段内有多少记录,比如一年,一个月,或者一天,有一个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 YEAR(record_date), MONTH(record_date)
查看MySQL中的日期和时间函数。
如果你想获得一个每月统计数据,每个月的行数按最近一个月排序,那么试试这个:
SELECT count(id),
YEAR(record_date),
MONTH(record_date)
FROM `table`
GROUP BY YEAR(record_date),
MONTH(record_date)
ORDER BY YEAR(record_date) DESC,
MONTH(record_date) DESC
GROUP BY DATE_FORMAT(record_date, '%Y%m')
Note (primarily, to potential downvoters). Presently, this may not be as efficient as other suggestions. Still, I leave it as an alternative, and a one, too, that can serve in seeing how faster other solutions are. (For you can't really tell fast from slow until you see the difference.) Also, as time goes on, changes could be made to MySQL's engine with regard to optimisation so as to make this solution, at some (perhaps, not so distant) point in future, to become quite comparable in efficiency with most others.
我试着使用上面的“WHERE”语句,我认为它是正确的,因为没有人纠正它,但我错了;经过一些搜索,我发现这是WHERE语句的正确公式,所以代码变成这样:
SELECT COUNT(id)
FROM stats
WHERE YEAR(record_date) = 2009
GROUP BY MONTH(record_date)
我希望每天都能得到类似的数据,经过一些试验,这是我在这个场景中能找到的最快的数据
SELECT COUNT(id)
FROM stats
GROUP BY record_date DIV 1000000;
如果你想每个月有一次,添加额外的零(00) 我不建议从“使代码可读”的角度考虑,它也可能在不同的版本中中断。但在我们的例子中,与我测试的其他更清晰的查询相比,这只花了不到一半的时间。
这是一个MySQL的答案(因为MySQL被标记在问题中),并在手册https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-conversion.html中有详细的说明