单表内的SQL时差

时间:2011-09-23 22:39:38

标签: mysql sql database


我有一个MySQL表,其中包含用户的登录数据。

user |  date               | type
-----+---------------------+------
1    | 2011-01-05 08:00:00 | login
1    | 2011-01-06 09:00:00 | login
1    | 2011-01-06 10:00:00 | logout
1    | 2011-01-06 09:50:00 | login

鉴于上表,我想通过添加一个名为duration的新单元来计算注销日期和上一个登录日期之间的时间差。例如。退出日期是'2011-01-06 10:00:00;以前的登录日期为“2011-01-06 09:50:00”。

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

user |  date               | type   | duration
-----+---------------------+--------+----------
1    | 2011-01-05 08:00:00 | login  | -
1    | 2011-01-06 09:00:00 | login  | -
1    | 2011-01-06 10:00:00 | logout | 10min
1    | 2011-01-06 09:50:00 | login  | -

提前致谢,
mawo

1 个答案:

答案 0 :(得分:3)

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