我在mysql中有一个events表,有两列:UserId,EventTime(datetime)。
我需要为每个用户id计算两件事:
会话数
会话长度总和
会话结束由2分钟定义,该用户没有事件。
我怎么能写这样的查询呢?
例如,对于附加图像中的这个用户,会话的数量是2,会话长度的总和是2分34秒
mysql - SQL中的 session 时间计算-LMLPHP

最佳答案

这是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;

10-06 02:18