gpt4 book ai didi

Mysql查询连续数据

转载 作者:行者123 更新时间:2023-11-29 21:51:21 25 4
gpt4 key购买 nike

假设我有一个 mysql 表 eventLog,它按 eventTime 排序

eventTime       guid
2015/8/13 09:32 gewgew23k
2015/8/13 21:26 fwetyhhhg
2015/8/14 04:23 abcdefghi
2015/8/14 08:33 bfhjrwtwq
2015/8/14 12:02 bfhjrwtwq
2015/8/14 12:02 bfhjrwtwq
2015/8/15 06:00 bfhjrwtwq
2015/8/15 07:24 bfhjrwtwq
2015/8/15 14:26 gweg234fp
2015/8/16 01:00 sfsdfefsd
2015/8/16 01:00 xcvcvdbbz
2015/8/16 01:00 fasfqwfqq
2015/8/16 01:05 bfhjrwtwq
2015/8/31 17:57 zxczxvzbb
2015/8/31 20:29 dssgxcvxc
2015/8/31 23:14 vnvbncdfh
2015/9/1 01:35 ti565iyii
2015/9/1 01:42 qewrwgjpo
2015/9/1 09:33 fwetyhhhg
2015/9/1 13:34 fwetyhhhg
2015/9/1 14:04 fwetyhhhg
2015/9/1 15:03 fwetyhhhg
2015/9/1 16:03 fwetyhhhg

如何找到连续出现超过 4 次的 guid。

这是预期的结果:

2015/8/14 08:33 bfhjrwtwq
2015/8/14 12:02 bfhjrwtwq
2015/8/14 12:02 bfhjrwtwq
2015/8/15 06:00 bfhjrwtwq
2015/8/15 07:24 bfhjrwtwq
2015/9/1 09:33 fwetyhhhg
2015/9/1 13:34 fwetyhhhg
2015/9/1 14:04 fwetyhhhg
2015/9/1 15:03 fwetyhhhg
2015/9/1 16:03 fwetyhhhg

最佳答案

您可以使用变量枚举值:

select t.*,
(@rn := if(@g = guid, @rn + 1,
if(@g := guid, 1, 1)
)
) as rn
from t cross join
(select @g := '', @rn := 0) params
order by eventTime;

接下来,进行反向排序以将最大值应用于每个组,然后选择:

select t.*
from (select t.*,
(@m := if(@g = guid, @m,
if(@g := guid, rn, rn)
)
) as m
from (select t.*,
(@rn := if(@g = guid, @rn + 1,
if(@g := guid, 1, 1)
)
) as rn
from t cross join
(select @g := '', @rn := 0) params
order by eventTime
) t cross join
(select @g1 := guid, @m := -1) params
from t
order by eventTime desc
) t
where m >= 4;

关于Mysql查询连续数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33601851/

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