mysql - 计算日期组之间的工作时间

标签 mysql time

登录/注销事件记录在这样的表中:

user_id     object_id   date_event
7           2           2013-05-03 08:37:11
7           3           2013-05-03 12:43:51
7           2           2013-05-03 15:33:41
7           3           2013-05-03 17:10:01

还有其他记录的对象,但 2 和 3 是重要的(2=登录,3=注销)。

我在查询时遇到问题,该查询将显示总登录小时数。我使用了 this作为起点,但我的查询针对登录的总时间返回 null。

        SELECT 
            el.user_id, 
            TIME(SUM(el.date_event*(1-2*el.object_id))) AS total_time
        FROM 
            event_log el 
        WHERE 
            DATE(el.date_event) = '2013-05-03' AND 
            el.object_id IN (2,3) AND 
            el.user_id = 9
        GROUP BY 
            el.user_id;

这产生:

user_id     total_time
9           NULL

我期待的地方

user_id     total_time
9           05:43:00

为什么返回 NULL?数据集中没有空值。

最佳答案

假设3是注销,2是登录

SELECT  T1.user_id, 
        T1.date_event,
        MIN(TimeDiff((T2.date_event), T1.date_event )) AS DaysDiff
FROM    YourTable T1
        LEFT JOIN YourTable T2
            ON T1.user_id = T2.user_id
            AND T2.date_event > T1.date_event
WHERE T1.object_id = 2 AND T2.object_id = 3
GROUP BY   T1.user_id, 
        T1.date_event

关于mysql - 计算日期组之间的工作时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16368142/

相关文章:

mysql - 我如何更新表中的一行或如果它不存在则插入它?

mysql - 如何从 SQL 查询中检索到的日期向后移动几个月?

c++ - 将 unix 时间转换为人类可读的格式

JavaScript 时间问题

javascript - 使用 setTimeout 与比较更新循环上的时间戳

javascript - 如何每周显示数组中的一项

MYSQL-错误#1054

android - 希腊字符 - phpMyAdmin

mysql - 表数据量大时提高查询性能

php - 如何在 PHP 中使用时间跨度?