在sql中计算会话时间

时间:2018-04-26 07:03:12

标签: mysql sql

我在mysql中有一个事件表,有两列:UserId,EventTime(datetime)。 我需要为每个UserId计算两件事:

  1. 会话数
  2. 会话长度总和
  3. 会话结束由2分钟定义,表示该用户没有任何事件。

    我该如何撰写这样的查询?

    因此,例如,对于附加图像中的此用户,会话数将为2,会话长度的总和将为2分34秒

    enter image description here

1 个答案:

答案 0 :(得分:1)

这是MySQL的痛苦。一种方法使用相关子查询来标识开始,然后使用变量为会话分配编号:

select e.*,
       (@s := if(@u <> userid or eventtime > prev_et + interval 2 minute, @s + 1
                 if(@u := userid, @s, @s)
                )
       ) as session_id
from (select e.*,
             (select max(e2.eventtime) from events e2 where e2.userid = e.userid and e2.eventtime < e.eventtime
             ) as prev_et
      from events e
      order by userid, eventtime
     ) e cross join
     (select @u := 1, @s := 0) params;