获取多个小时内按分钟时间范围内的 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 行的主要内容,如果未能解决你的问题,请参考以下文章