单个表中的SQL时间差 [英] SQL time difference within single table

查看:124
本文介绍了单个表中的SQL时间差的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



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

 
user |日期|类型
----- + --------------------- + ------
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 |登录

鉴于上表,我想计算注销日期与上次登录日期之间的时间差,方法是添加一个新单元格持续时间。例如。退出日期为2011-01-06 10:00:00;并且先前的登录日期将为2011-01-06 09:50:00。



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

 
user |日期|类型|持续时间
----- + --------------------- + -------- + -------- -
1 | 2011-01-05 08:00:00 |登录| -
1 | 2011-01-06 09:00:00 |登录| -
1 | 2011-01-06 10:00:00 | logout | 10min
1 | 2011-01-06 09:50:00 |登录| -

提前感谢

mawo

解决方案

  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和b.type ='login')as login_date
FROM table1 a WHERE a.type ='logout'
)x
pre>


I have a single MySQL table with login data of users.

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

Given the above table I would like to calculate the time difference between the logout date and the previous login date by adding a new cell called duration. E.g. the logout date was '2011-01-06 10:00:00; and the previous login date would be '2011-01-06 09:50:00'.

The result should look somehow like this. Rows with type=login should not have a duration value.

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  | -

Thanks in advance,
mawo

解决方案

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

这篇关于单个表中的SQL时间差的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆