mysql - sql中的会话时间计算
问题描述
我在 mysql 中有一个包含两列的事件表:UserId、EventTime(datetime)。我需要为每个 UserId 计算两件事:
- 会话数
- 会话长度总和
会话结束由 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;
推荐阅读
- javascript - 带有手风琴列表的 ScrollView 溢出导航器边界
- python - 在 skimage 中找不到度量标准的模块。其他一切正常
- angular - 如何在 LoadingIndicator 的 customView 属性中传递图像?
- for-loop - 如何添加
- 标记到 TWIG 多值文本字段?
- python - 不明白这个 SyntaxError 关于找到的多个语句的原因
- curl - 需要帮助将 curl 转换为 google 脚本代码
- python - 从字符串中删除前导和尾随空格
- c - 在这个 git repo 中运行 ./Makefile 会导致错误
- javascript - React-Native Redux 初始状态值为新减速器返回“未定义”?
- python - 求解数字平方根的巴比伦方法