mysql - 在一个时间范围内分组为 5 分钟的间隔

标签 mysql sql group-by

我对想要执行的 mySQL 命令有一些困难。

SELECT a.timestamp, name, count(b.name) 
FROM time a, id b 
WHERE a.user = b.user
  AND a.id = b.id
  AND b.name = 'John'
  AND a.timestamp BETWEEN '2010-11-16 10:30:00' AND '2010-11-16 11:00:00' 
GROUP BY a.timestamp

这是我当前的输出语句。

timestamp            name  count(b.name)
-------------------  ----  -------------
2010-11-16 10:32:22  John  2
2010-11-16 10:35:12  John  7
2010-11-16 10:36:34  John  1
2010-11-16 10:37:45  John  2
2010-11-16 10:48:26  John  8
2010-11-16 10:55:00  John  9
2010-11-16 10:58:08  John  2

如何将它们分组为 5 分钟间隔结果?

我希望我的输出是这样的

timestamp            name  count(b.name)
-------------------  ----  -------------
2010-11-16 10:30:00  John  2
2010-11-16 10:35:00  John  10
2010-11-16 10:40:00  John  0
2010-11-16 10:45:00  John  8
2010-11-16 10:50:00  John  0
2010-11-16 10:55:00  John  11 

最佳答案

这适用于每个间隔。

PostgreSQL

SELECT
    TIMESTAMP WITH TIME ZONE 'epoch' +
    INTERVAL '1 second' * round(extract('epoch' from timestamp) / 300) * 300 as timestamp,
    name,
    count(b.name)
FROM time a, id 
WHERE …
GROUP BY 
round(extract('epoch' from timestamp) / 300), name


MySQL

SELECT
    timestamp,  -- not sure about that
    name,
    count(b.name)
FROM time a, id 
WHERE …
GROUP BY 
UNIX_TIMESTAMP(timestamp) DIV 300, name

关于mysql - 在一个时间范围内分组为 5 分钟的间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4342370/

相关文章:

sql-server - 帮助使用 case 和 group 进行 sql 查询

MySQL 社区版

php - 从 buddys、friends 和 users 表中获取数据

java - 如何使用 SSL JDBC 连接到 MySQL 服务器

c# - 使用 JSON 输入创建表定义的存储过程

mysql - CakePHP 在虚拟字段中使用 "Group By"不起作用

MySql:按项目数然后按内容排序列表

php - 拉维尔 5.4 : How to order by count(column) in eloquent?

sql - 如果每个对象/项目的数量超过 4 个,则删除关系

sql - Oracle SQL NOT NULL x或NULL?