gpt4 book ai didi

mysql如何按时间顺序对记录进行分组

转载 作者:行者123 更新时间:2023-11-28 23:53:12 25 4
gpt4 key购买 nike

假设我在 TableA 中有以下记录:

UserID, Date, GroupNo, StartTime, EndTime
4, 2015-08-03, 1, 2015-08-03 08:00:00, 2015-08-03 09:00:00
4, 2015-08-03, 1, 2015-08-03 09:00:00, 2015-08-03 10:00:00
4, 2015-08-03, 1, 2015-08-03 13:00:00, 2015-08-03 14:00:00
4, 2015-08-03, 1, 2015-08-03 14:00:00, 2015-08-03 15:00:00
4, 2015-08-03, 1, 2015-08-03 15:00:00, 2015-08-03 16:00:00
4, 2015-08-03, 2, 2015-08-03 17:00:00, 2015-08-03 18:00:00

有没有一种方法可以使用查询将我的记录分组为 3 行,从而将所有链接的时间(结束时间)=时间(开始时间)分组在一起?

查询的最终结果将是:

UserID, Date, GroupNo, StartTime, EndTime
4, 2015-08-03, 1, 08:00:00, 10:00:00
4, 2015-08-03, 1, 13:00:00, 16:00:00
4, 2015-08-03, 2, 17:00:00, 18:00:00

我认为查询应该是这样的:

select UserID, Date, GroupNo, min(time(StartTime)) as StartTime,   
max(time(EndTime)) as EndTime
from TableA
group by "??"

但我不确定如何将其分组...

是否可行?

非常感谢。

如果数据尚未按顺序排列,或者涉及其他日期:我发现此修改后的查询有效:(对于将来可能需要知道的其他人)

select userid, min(date) 作为日期, groupno, min(time(starttime)), max(time(endtime))从(选择一个。*, (@grp := if(@ugt = concat_ws('-', userid, date, groupno, time(starttime)), if(@ugt := concat_ws('-', userid, date, groupno, time(endtime)), @grp, @grp), if(@ugt := concat_ws('-', userid, date, groupno, time(endtime)), @grp+1, @grp+1) ) ) 组 from (select * from TableA where userid=4 order by date, Time(starttime)) 交叉连接 (选择@grp := 0, @ugt := NULL) 参数 按用户 ID、日期、组号、时间(开始时间)排序 ) a where userid=4按 userid、groupno、grp 分组按日期、时间(开始时间)排序

最佳答案

这在 MySQL 中有点麻烦,但是有可能。您需要跟踪时间以确定新组何时开始。变量可能是最简单的方法:

select userid, min(date) as date, groupno, min(starttime), max(endtime)
from (select a.*,
(@grp := if(@ugt = concat_ws('-', userid, groupno, starttime),
if(@ugt := concat_ws('-', userid, groupno, endtime), @grp, @grp),
if(@ugt := concat_ws('-', userid, groupno, endtime), @grp+1, @grp+1)
)
) grp
from tableA a cross join
(select @grp := 0, @ugt := NULL) params
order by userid, groupno, starttime
) a
group by userid, groupno, grp;

想法是按useridgroupnostarttime 对数据进行排序(也许date 应该也包括在内,很难从问题中分辨出来。

然后给变量@grp赋值。当 key 相同时,此值不会更改。当键发生变化时,该值会增加。有一点小技巧,因为上一行的 endtime 需要与当前行的 starttime 进行比较。

最后,@grp 用于聚合。

关于mysql如何按时间顺序对记录进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32246685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com