Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 单表中的SQL时差_Mysql_Sql_Database - Fatal编程技术网

Mysql 单表中的SQL时差

Mysql 单表中的SQL时差,mysql,sql,database,Mysql,Sql,Database,我有一个MySQL表,其中包含用户的登录数据 根据上表,我想通过添加一个名为duration的新单元格来计算注销日期和上一次登录日期之间的时间差。例如,注销日期为“2011-01-06 10:00:00”;之前的登录日期为“2011-01-06 09:50:00” 结果应该是这样的。type=login的行不应具有持续时间值 user | date | type | duration -----+---------------------+--------+--

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

根据上表,我想通过添加一个名为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

可能重复感谢您的快速回复!这很有效。如果我还想包括没有注销日期的登录怎么办? 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 | -
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