在mysql中计算登录注销时间
Posted
技术标签:
【中文标题】在mysql中计算登录注销时间【英文标题】:calculate login logout time in mysql 【发布时间】:2020-04-29 23:33:31 【问题描述】:我有一个这样的表结构
根据事件在单个列中捕获时间。但我需要在一行中完成一个完整的事件。
需要的数据如下:
【问题讨论】:
为什么不用 session 而不是 mysql?你可以在会话中设置这个东西,而不是让它变得复杂。 【参考方案1】:我会将此视为一个差距和孤岛问题。
假设您正在运行 MySQL 8.0,您可以定义具有窗口总和的组,每次看到给定用户的 'LOGIN'
事件时,窗口总和增加 1
:
select
user,
min(event_date) login,
min(case when event = 'LOGOUT' then event_date END) logout,
timediff(min(case when event = 'LOGOUT' then event_date END), min(event_date)) total_time
from (
select
t.*,
sum(case when event = 'LOGIN' then 1 else 0 end)
over(partition by user order by event_date) grp
from mytable t
) t
group by user, grp
order by user, login
请注意,timediff()
处理的持续时间不超过大约 838 小时。否则,您需要使用timestampdiff()
之类的。
【讨论】:
以上是关于在mysql中计算登录注销时间的主要内容,如果未能解决你的问题,请参考以下文章