我的表格记录如下:
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条答案
按热度按时间voase2hg16#
-+---------+
pgvzfuti17#
你可以试试下面的方法,
演示
evrscar218#
-+
anhgbhbe19#
试试这个:
dpiehjr420#
-+---------+
biswetbf21#
-+
lskq00tm22#
假设每个网关和广播都需要第一个,请使用以下命令:
编辑:看看mysql版本8 doc,语法是不同的