当前位置: 代码迷 >> Sql Server >> 疑难有关问题 一批数据里面 想抽出 时间带重叠的数据
  详细解决方案

疑难有关问题 一批数据里面 想抽出 时间带重叠的数据

热度:26   发布时间:2016-04-24 09:51:37.0
疑难问题 一批数据里面 想抽出 时间带重叠的数据
现有一批数据  
id                  车                    人                 出车开始时间                                 出车结束时间 
 1                   京1                   小李             2014/10/01 8:00:00                     2014/10/01 10:00:00
 2                   京1                    小王            2014/10/01 9:00:00                     2014/10/01 12:00:00 
 3                  京1                    小李            2014/10/01 12:00:00                   2014/10/01 19:00:00
 4                京2                       小三             2014/10/02 12:00:00                   2014/10/02 19:00:00
5                 京3                        小四            2014/10/02 12:00:00                   2014/10/02 19:00:00
6                 京3                        小四            2014/10/02 16:00:00                   2014/10/02 17:00:00


希望  就是  对于一辆车  开始时间到结束时间   有 重叠的 (时间带有交集的)的话      抽出 ID   车   人  出车开始时间


------解决思路----------------------

select * from tablename as a 
where exists (select 1 from tablename as b where  a.id!=b.id and a.车=b.车 and
b.出车开始时间 between a.出车开始时间 
and a.出车结束时间 or (b.出车结束时间 between a.出车开始时间 
and a.出车结束时间))

------解决思路----------------------


with cte as 
(
select *,row_number() over(partition by 车 order by 出车开始时间 asc) as rId from tablename 
)
select * from cte as a  where exists (select * from cte where ((rId=a.rID+1 and 出车开始时间<=a.出车结束时间) or (rId=a.rID-1 and 出车结束时间 <=a.出车开始时间)) and 车=a.车) 

------解决思路----------------------
引用:

with cte as 
(
select *,row_number() over(partition by 车 order by 出车开始时间 asc) as rId from tablename 
)
select * from cte as a  where exists (select * from cte where ((rId=a.rID+1 and 出车开始时间<=a.出车结束时间) or (rId=a.rID-1 and 出车结束时间 <=a.出车开始时间)) and 车=a.车) 

小调一下

with cte as 
(
select *,row_number() over(partition by 车 order by 出车开始时间 asc) as rId from tablename 
)
select * from cte as a  where exists (select * from cte where ((rId=a.rID+1 and 出车开始时间<=a.出车结束时间) or (rId=a.rID-1 and 出车结束时间 >=a.出车开始时间)) and 车=a.车) 

------解决思路----------------------
  相关解决方案