现有一批数据
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.车)
------解决思路----------------------