MySQL 分组依据与时间差异

标签 mysql sql database group-by

我的表记录如下:

id         startFrom                   endOn               gateway   broadcast
1    2018-09-01T23:41:24:024  2018-09-01T23:45:24:028         A         X01
2    2018-09-01T23:41:24:025  2018-09-01T23:45:24:032         A         X01
3    2018-09-01T23:41:24:026  2018-09-01T23:45:24:028         B         X01
4    2018-09-01T23:41:24:030  2018-09-01T23:45:24:045         C         X01
5    2018-09-01T22:41:24:029  2018-09-01T23:41:24:784         B         X02
6    2018-09-01T23:41:24:025  2018-09-01T23:45:24:038         A         X01

如果我想使用单个查询来查找特定广播中每个网关中的第一个请求时间段。如何使用MySQL对其进行分组查询?

失败:

SELECT gateway, TIMESTAMPDIFF(MICROSECOND, `startFrom`, `endOn`) AS `timeDiff` FROM Records WHERE broadcast = 'X01' GROUP BY gateway

如果我尝试制作一个临时表,例如:

SELECT gateway, MIN(timeDiff)
FROM (SELECT TIMESTAMPDIFF(MICROSECOND, `startFrom`, `endOn`) AS `timeDiff`, gateway, broadcast FROM Records) t
WHERE broadcast = 'X01'
GROUP BY gateway;

它只能从该广播中每个网关的记录中获取最小时间差异,但我必须查询“第一条记录”(=> ORDER BY startFrom ASC)时间差异。

目标输出是:

gateway        startFrom                 endOn                 timeDiff
A       2018-09-01T23:41:24:024  2018-09-01T23:45:24:028         4000  
B       2018-09-01T23:41:24:026  2018-09-01T23:45:24:028         2000  
C       2018-09-01T23:41:24:030  2018-09-01T23:45:24:045         15000  

感谢您的阅读和帮助

最佳答案

从记录中选择*;
+----+---------------------+---------------------+ --------+------------+
|编号 |开始于 |结束 |网关|广播|
+----+---------------------+---------------------+ --------+------------+
| 1 | 2018-09-17 05:23:53 | 2018-09-17 06:23:53 |一个 | X01 |
| 2 | 2018-09-17 05:24:08 | 2018-09-17 06:24:08 |一个 | X01 |
| 3 | 2018-09-17 05:24:25 | 2018-09-17 06:24:25 |乙| X01 |
| 4 | 2018-09-17 05:24:32 | 2018-09-17 06:24:32 | C | X01 |
| 5 | 2018-09-17 05:24:42 | 2018-09-17 07:24:42 |乙| X02 |
+----+---------------------+---------------------+ ---------+------------+

这是您正在寻找的查询吗..

从网关 asc 的记录组中选择 gateway,startFrom,endOn,time_to_sec(timediff(endOn,startFrom)) 作为 timeDiff ;
+---------+--------------------+----------------- ----+----------+
|网关|开始于 |结束 |时间差 |
+---------+--------------------+----------------- ----+----------+
|一个 | 2018-09-17 05:23:53 | 2018-09-17 06:23:53 | 3600 |
|乙| 2018-09-17 05:24:25 | 2018-09-17 06:24:25 | 3600 |
| C | 2018-09-17 05:24:32 | 2018-09-17 06:24:32 | 3600 |
+---------+--------------------+----------------- ---+----------+

关于MySQL 分组依据与时间差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52360997/

相关文章:

mysql - 为人员创建唯一引用,但按帐户分组

c++ - 如何使用 XDevAPI 将行结果存储到字符串对象

Sql Server 2008计算两个日期之间的夜晚但删除第31晚

mysql - SQL查询从所有数据库中获取数据

node.js - 使用 mongoose 在 mongoDb 中更新数组内的对象

php - 数据显示来自4个表mysql

php - MySQL 的 AJAX HTTP 请求问题

java - Jooq 用于创建 jasper 报告查询

mysql - “INSERT IGNORE” 和 “… ON DUPLICATE KEY UPDATE” 都会发生什么?

database - 在数据库列中存储分隔列表真的那么糟糕吗?