Mysql中日期时间重叠的消除

Mysql中日期时间重叠的消除,mysql,sql,Mysql,Sql,我有一个存储登录和注销时间的表。请帮助我删除行之间的日期时间重叠 我有这样的桌子 id | login_time | logout_time 1 |'2017-02-20 11:20:00' | '2017-02-20 12:10:00' 2 |'2017-02-20 12:13:00' | '2017-02-20 12:40:00' 3 |'2017-02-20 12:30:00' | '2017-02-20 13:10:00' 4 |'2017-02-20 13:

我有一个存储登录和注销时间的表。请帮助我删除行之间的日期时间重叠

我有这样的桌子

id | login_time           | logout_time
1  |'2017-02-20 11:20:00' | '2017-02-20 12:10:00'
2  |'2017-02-20 12:13:00' | '2017-02-20 12:40:00'
3  |'2017-02-20 12:30:00' | '2017-02-20 13:10:00'
4  |'2017-02-20 13:20:00' | '2017-02-20 13:30:00'
5  |'2017-02-20 13:25:00' | '2017-02-20 14:20:00'
输出应该是

login_time           | logout_time
2017-02-20 11:20:00  | 2017-02-20 12:10:00
2017-02-20 12:13:00  | 2017-02-20 13:10:00
2017-02-20 13:20:00  | 2017-02-20 14:20:00

帮助我。

与exists关联的子查询应该可以解决您的问题

select login_time,logout_time 
from time_table TT1
where not exists 
(
select 1
from time_table TT2
where TT1.login_time  >= TT2.login_time AND 
TT1.login_time <=TT2.logout_time and tt1.id > tt2.id ) 

SQl FIDLE

根据您的输出示例,我更改了查询并选中它,它将返回您期望的结果集

select t1.logintime,t2.logoutime from
(
select F1.logintime,F1.rank from 
(
select 
  t.logintime,
  CASE WHEN @prevRank = logintime THEN @currRank
       WHEN @prevRank := logintime THEN @currRank := @currRank + 1
   END AS rank
from (
  select  min(login_time) as logintime from time_table
group by hour(login_time) 
  ) t
  cross join (SELECT @currRank := 0, @prevRank := NULL) r

  ) as F1
 ) t1 

inner join

(
select F2.logoutime,F2.rank from
(
select 
  t.logoutime,
  CASE WHEN @preRank = logoutime THEN @curRank
       WHEN @preRank := logoutime THEN @curRank := @curRank + 1
   END AS rank
from (
  select  min(logout_time) as logoutime from time_table
group by hour(logout_time) 
  ) t
  cross join (SELECT @curRank := 0, @preRank := NULL) r

  ) F2
  ) as  t2

  on t1.rank = t2.rank

我看不到重叠。重叠是在代理级别吗?@GordonLinoff:请检查注销记录2和登录记录3。日期时间重叠。@skelwa:是的,如果重叠。想要删除并显示为单个记录。但是2和3是针对不同的代理的,那么这是如何重叠的呢?@learningstudent我已经重新修改了我的ans,请查看它是否适用于您。它没有按预期工作。它忽略了完整的记录。@Zaynulabadinthin:不,它不工作。你只记录了每一个特工。我想根据记录删除重叠。请检查输出。你可能会因为保留代理的名字而感到困惑。我做了一些有问题的改变。@Zaynulabadinuthin:这是可行的,但结果并不像预期的那样。注销是从上一条记录中获取的,实际上我应该获取下一条记录,其中登录和注销的下一条记录之间的登录时间。请帮助我。你能给我一些不工作的地方的样本数据吗?