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