小编典典

单个表中的SQL时间差

sql

我有一个带有用户登录数据的MySQL表。

用户| 日期| 类型
----- + --------------------- + ------
1 | 2011-01-05 08:00:00 | 登录
1 | 2011-01-06 09:00:00 | 登录
1 | 2011-01-06 10:00:00 | 登出
1 | 2011-01-06 09:50:00 | 登录

给定上表,我想通过添加一个称为工期的新单元格来计算注销日期和上一个登录日期之间的时间差。例如,登出日期为‘2011-01-06 10:00:00;
并且以前的登录日期为“ 2011-01-06 09:50:00”。

结果应该看起来像这样。type = login的行不应具有持续时间值。

用户| 日期| 类型 期间
----- + --------------------- + -------- + ----------
1 | 2011-01-05 08:00:00 | 登录| --
1 | 2011-01-06 09:00:00 | 登录| --
1 | 2011-01-06 10:00:00 | 登出| 10分钟
1 | 2011-01-06 09:50:00 | 登录| --

预先感谢,
mawo


阅读 206

收藏
2021-04-14

共1个答案

小编典典

SELECT x.*, TIMEDIFF(x.logout_date, x.login_date) as duration
FROM
(
SELECT a.user_id, a.`date` as logout_date, 
(SELECT MAX(b.`date`) FROM table1 b WHERE b.`date` <a.`date` 
and b.user=a.user and b.type = 'login') as login_date    
FROM table1 a WHERE a.type ='logout'
)x
2021-04-14