在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中计算登录注销时间的主要内容,如果未能解决你的问题,请参考以下文章

当某些记录不完整时,计算登录和注销之间的持续时间

使用 php 和 mysql 自动注销

登录注销考勤时间

当用户登录时显示“注销”按钮,当他不使用 PHP/MySQL 时显示“连接”

无法注销mysql和php

将用户登录-注销时间存储到数据库中有所不同