时间差不大于15分钟的组行

时间:2016-11-15 11:41:06

标签: mysql time group-by between

我想对中间不超过15分钟的行进行分组。我喜欢看用户何时登录并拥有“会话”。

Time
2016-11-15 11:37:34
2016-11-15 11:35:04
2016-11-15 11:21:11
2016-11-15 09:37:22
2016-11-15 09:27:01
2016-11-14 21:37:59
2016-11-14 21:33:35
2016-11-14 21:31:14

结果:

Start                 End
2016-11-15 11:21:11   2016-11-15 11:37:34
2016-11-15 09:27:01   2016-11-15 09:37:22
2016-11-14 21:31:14   2016-11-14 21:37:59

这是我目前的查询:

SELECT 
ROUND(UNIX_TIMESTAMP(Time)/900) as Session
FROM workouts
GROUP BY Session
ORDER BY Session DESC

但它只对15分钟之间的所有行进行分组。

1 个答案:

答案 0 :(得分:1)

你根本不在GROUP BY之后......

SELECT x.* 
  FROM my_table x 
  LEFT 
  JOIN my_table y ON y.dt > x.dt 
   AND y.dt <= x.dt + INTERVAL 15 MINUTE 
 WHERE y.dt IS NULL;

编辑:

要回答修正后的问题,您可能会考虑这些问题。它看起来要复杂得多,但实际上它可能会更快地执行......

SELECT MIN(dt) start
     , MAX(dt) end 
  FROM 
     ( SELECT dt
            , CASE WHEN @prev > dt - INTERVAL 15 MINUTE THEN @i:=@i ELSE @i:=@i+1 END rank
            , @prev:=dt 
         FROM my_table
            , ( SELECT @i:=0,@prev:=null ) vars 
        ORDER 
            BY dt
     ) a 
 GROUP 
    BY rank;

要了解它是如何工作的,可能有助于自己运行子查询(a)