在多个小时内以分钟的时间范围获取mySQL行

时间:2011-02-17 02:54:02

标签: php mysql datetime date

我可以尝试用PHP做这个,但我认为它可以在mySQL中完成。我在mySQL中有行,日期时间超过几个小时。我希望在这几个小时内返回每分钟间隔的计数。

GROUP BY MINUTE(date)

给了我60行,但它没有给我01:00:00 - 01:01:00的计数与02:00:00和02:00:01不同。

如何做到这一点?

5 个答案:

答案 0 :(得分:23)

MySQL分钟功能实际上是按分钟数和分组。尝试按小时分组:

GROUP BY HOUR(date), MINUTE(date)

答案 1 :(得分:17)

旧问题的新答案!

要按分钟分组,您可以简单地:

SELECT (unix_timestamp(`date`) - unix_timestamp(`date`)%60) groupTime, count(*) 
FROM yourTable
# WHERE clause
GROUP BY groupTime

使用此解决方案,您永远不会将一分钟的日期时间与另一小时,一天的同一分钟的日期时间混合......

另外,它是一种演变的解决方案,因为通过改变" 60"对于另一个号码,你可以分组(120),一天(86400),......

答案 2 :(得分:14)

只需使用DATE_FORMAT

GROUP BY DATE_FORMAT(`date`, '%H:%i')

答案 3 :(得分:5)

由于MySql将日期/时间存储为完整数字,因此将数字除以100将为您提供分钟:

GROUP BY FLOOR(`data` / 100)

按数字分组比按文本分组更有效。

如果您想按分钟分组,无论日期如何:

GROUP BY FLOOR(`data` / 100) % 10000

答案 4 :(得分:2)

对于那些搜索了相同结果但使用UNIX时间(从1970-01-01开始的秒数)的用户,可以使用:

SELECT
    FROM_UNIXTIME(`unix_time`, '%Y-%m-%d %H:%i') as minute,
    COUNT(id) as number_total
FROM my_table
GROUP BY minute

更多日期功能> https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html