簡體   English   中英

MySQL查詢連續數據

[英]Mysql query consecutive data

假設我有一個由eventTime排序的mysql表eventLog

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次以上的引導。

這是預期的結果:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM