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

Posted

技术标签:

【中文标题】获取多个小时内按分钟时间范围内的 mySQL 行【英文标题】:Get mySQL rows in minute-by-minute time range over multiple hours 【发布时间】:2011-06-28 19:37:48 【问题描述】:

我可以尝试通过 php 执行此操作,但我认为它可以简单地在 mysql 中完成。我在 mySQL 中有日期时间超过多个小时的行。我想在这几个小时内返回每分钟间隔的计数。

GROUP BY MINUTE(date)

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

如何做到这一点?

【问题讨论】:

日期本身呢?您想将星期日的分钟数和星期一的分钟数组合在一起吗? 【参考方案1】:

对于那些搜索相同结果但使用 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

【讨论】:

【参考方案2】:

旧问题的新答案!

要按分钟分组,您可以:

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

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

另外,这是一个不断发展的解决方案,因为通过将“60”更改为另一个数字,您可以按几分钟 (120)、一天 (86400) 分组...

【讨论】:

此解决方案的一个主要附带好处是,如果您存储时间戳而不是日期,那么您可以删除 unix_timestamp() 部分并仍然按分钟分组 - 太棒了! 真的太棒了!【参考方案3】:

由于 MySql 将日期/时间存储为一个完整的数字,将数字除以 100 将得到分钟:

GROUP BY FLOOR(`data` / 100)

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

如果您想按分钟分组而不考虑日期:

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

【讨论】:

非常满意的回答谢谢!:) 1000 10 分钟 10000 1 小时 20000 2 小时【参考方案4】:

只需使用DATE_FORMAT:

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

【讨论】:

谢谢。这对我很有帮助:SELECT DATE_FORMAT(`execute_at`, '%Y-%m-%d %H:%i'), COUNT(*) FROM automations GROUP BY DATE_FORMAT(`execute_at`, '%Y-%m-%d %H:%i') ORDER BY count(*) DESC【参考方案5】:

MySQL 分钟函数实际上是采用分钟数并按此分组。尝试按小时和分钟分组:

GROUP BY HOUR(date), MINUTE(date)

【讨论】:

以上是关于获取多个小时内按分钟时间范围内的 mySQL 行的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb - 在一小时内按日期/时间获取不同的值

如何计算最后一秒、一分钟和一小时内的请求数?

如何从SQL中的当前时间获取所有时间在下一个小时范围内的数据

AngularJS在范围之间过滤

Prometheus-PQL

MYSQL获取一定时间范围内的数据