Datetime MySQL:过去24小时内按小时插入的记录

Datetime MySQL:过去24小时内按小时插入的记录,datetime,mysql,timestamp,Datetime,Mysql,Timestamp,我试图列出过去24小时内每小时插入数据库的记录数。每行显示该小时插入的记录,以及该记录在几小时前插入的记录 现在我的问题是: SELECT COUNT(*), FLOOR( TIME_TO_SEC( TIMEDIFF( NOW(), time)) / 3600 ) FROM `records` WHERE time > DATE_SUB(NOW(), INTERVAL 24 HOUR) GROUP BY HOUR(time) ORDER BY time ASC 现在它返回: 28 23

我试图列出过去24小时内每小时插入数据库的记录数。每行显示该小时插入的记录,以及该记录在几小时前插入的记录

现在我的问题是:

SELECT COUNT(*), FLOOR( TIME_TO_SEC( TIMEDIFF( NOW(), time)) / 3600 )
FROM `records`
WHERE time > DATE_SUB(NOW(), INTERVAL 24 HOUR)
GROUP BY HOUR(time)
ORDER BY time ASC
现在它返回:

28  23
62  23
14  20
1    4
28  3
19  1
这显示了23小时前的两行,当时每小时只能显示一行。 我认为这与使用NOW()而不是在一小时开始时获取时间有关,我不确定如何获取时间


必须有一种更简单的方法来实现这一点。

如果按
小时(时间)
分组,则应在所选表达式中使用
小时(时间)
,而不是
时间。例如:

SELECT HOUR(time), COUNT(*)
FROM `records`
WHERE time > DATE_SUB(NOW(), INTERVAL 24 HOUR)
GROUP BY HOUR(time)
ORDER BY HOUR(time)
或者,您可以按要返回的表达式进行分组:

SELECT COUNT(*), FLOOR( TIME_TO_SEC( TIMEDIFF( NOW(), time)) / 3600 )
FROM `records`
WHERE time > DATE_SUB(NOW(), INTERVAL 24 HOUR)
GROUP BY FLOOR( TIME_TO_SEC( TIMEDIFF( NOW(), time)) / 3600 )
ORDER BY FLOOR( TIME_TO_SEC( TIMEDIFF( NOW(), time)) / 3600 )
如果您想知道,在同一个查询中多次调用
NOW()
是安全的。从:

返回当前日期或时间的函数在开始执行查询时,每个查询只计算一次。这意味着在一个查询中对函数(如NOW()的多个引用)总是产生相同的结果