Datetime MySQL:过去24小时内按小时插入的记录
我试图列出过去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
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()的多个引用)总是产生相同的结果