MYSQL 按过去 10 分钟对日期间隔进行分组

标签 mysql sql

我有一个包含消息和时间戳字段的数据库。我想选择过去 10 分钟的每一分钟的计数。这是我当前的查询:

SELECT date_format(timestamp, '%H:%i:%s'), COUNT(*) as count
FROM test
WHERE timestamp BETWEEN DATE_SUB(NOW(), INTERVAL 10 MINUTE) AND NOW() 
GROUP by
    DATE_FORMAT(timestamp, '%i')
    ORDER BY timestamp ASC

这几乎如我所愿,向我显示过去 10 分钟的计数。

但是,由于我按时间戳分组,除了最后一分钟,我从每分钟的第一个数据库条目中获取计数,使我的第一个和最后一个结果比其他结果少得多。

就像这张图片:

enter image description here

时间戳计数
11:25:35 6
11:26:03 11
11:27:05 11
11:28:01 12
11:29:03 12
11:30:05 10
11:31:01 12
11:32:03 12
11:33:05 11
11:34:01 12
11:35:03 5

我正在寻找的是一种使用 NOW() 之类的东西而不是我的时间戳按分钟分组的方法,就像这个例子一样。

时间戳计数
11:25:35 11
11:26:35 12
11:27:35 11
11:28:35 11
11:29:35 11
11:30:35 11
11:31:35 11
11:32:35 11
11:33:35 11
11:34:35 11

enter image description here

提前致谢!

最佳答案

问题是 WHERE 子句。在进行聚合之前,您需要删除多余的秒数。

一种方法是转换为秒,除以 60,截断数字,然后乘以 60。以下将值转换回日期/时间值,因此将使用该列的索引:

SELECT date_format(timestamp, '%H:%i:%s'), COUNT(*) as count
FROM test
WHERE timestamp >= from_unixtime(floor(unix_timestamp(now()) / 60) * 60) - interval 10 minute AND
      timestamp < from_unixtime(floor(unix_timestamp(now()) / 60) * 60)
GROUP BY DATE_FORMAT(timestamp, '%i')
ORDER BY timestamp ASC

关于MYSQL 按过去 10 分钟对日期间隔进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54108250/

相关文章:

python - 如何在 Anaconda 的 Python IDE 中使用 MySQL

mysql - 优化查询响应时间

php - Ajax - 分别从数据库中为每个评论加载数据

SQL Server 连接 GROUP BY

sql - 查询列出 IBM DB2 中所有可用的数据库

sql - Html5 本地数据存储,跨设备同步

php - 检索多个单项或引用的数据,无需类似操作符

php - 使用纬度经度距离从数据库检索记录 mysql join

sql - SSIS删除重复数据

sql - 如何正确使用 Sql Server ROW_NUMBER 函数进行有序查询?