我的表格记录如下:
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
谢谢你的阅读和帮助
22条答案
按热度按时间e1xvtsh31#
swvgeqrz2#
从记录中选择*;
+----+
bejyjqdl3#
|a | 2018-09-17 05:23:53 | 2018-09-17 06:23:53 | 3600|
|b | 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|
+---------+
vnzz0bqm4#
-+
jw5wzhpr5#
-+
这就是你要找的问题。。
从gateway asc的记录组中选择gateway,startfrom,endon,time_to_sec(timediff(endon,startfrom))作为timediff;
+---------+
cunj1qz16#
-+---------+
13z8s7eq7#
-+
xt0899hw8#
|网关|从|结束|时间差开始|
+---------+
fkvaft9z9#
-+
|id |从|结束|网关|广播开始|
+----+
lndjwyie10#
-+
unguejic11#
-+
iibxawm412#
-+
|2018年9月17日05:23:53 2018年9月17日06:23:53|
|2 | 2018-09-17 05:24:08 | 2018-09-17 06:24:08 | a | x01|
|2018年9月17日05:24:25 2018年9月17日06:24:25北京时间01|
|2018年9月17日05:24:32 2018年9月17日06:24:32 c:x01|
|2018年9月17日05:24:42 2018年9月17日07:24:42北京02|
+----+
9rbhqvlz13#
-+
olhwl3o214#
-+
myzjeezk15#
-+