SQL Server 2008, 关于查询表内的时间段数据是不是重叠

SQL Server 2008, 关于查询表内的时间段数据是否重叠
表结构, 测试数据, 期望得到该表是否有时间段重叠

create table dbo.t1 (id int primary key identity(1,1) not null,c1 datetime,c2 datetime);

insert into dbo.t1 (c1 ,c2 )
select '2014-01-29 08:00:00.000','2014-01-29 09:30:00.000'
union all
select '2014-01-29 09:00:00.000','2014-01-29 09:30:00.000'
union all
select '2014-01-30 13:00:00.000','2014-01-30 14:30:00.000'
union all
select '2014-02-01 10:00:00.000','2014-02-01 11:30:00.000'
union all
select '2014-02-01 11:30:00.000','2014-02-01 13:00:00.000';
go


每一条数据有一个开始时间c1, 结束时间c2     统计该表所有数据中时间范围,临界点也算 求大神支招!

如第1条 ,第2条   9点00-9点30  重叠
第 4,5 条  在11点30分有重叠  

存储过程或者SQL 都可以。
------解决思路----------------------


select* from t1 as a join t1 as b on a.id<b.id
where (b.c1  between a.c1 and a.c2) or
(b.c2  between a.c1 and a.c2)

--结果
id          c1                      c2                      id          c1                      c2
----------- ----------------------- ----------------------- ----------- ----------------------- -----------------------
1           2014-01-29 08:00:00.000 2014-01-29 09:30:00.000 2           2014-01-29 09:00:00.000 2014-01-29 09:30:00.000
4           2014-02-01 10:00:00.000 2014-02-01 11:30:00.000 5           2014-02-01 11:30:00.000 2014-02-01 13:00:00.000

(2 行受影响)

为空表示没有重复。有几行 表示有几对时间重复。
看着2个ID就知道那几行重复了

------解决思路----------------------
本帖最后由 roy_88 于 2014-09-24 11:55:43 编辑

没人回复就直接改改回复内容,看看是不是这样的显示效果
go
SELECT  
a.ID,a.c1,a.c2,RTRIM(a.ID)+'~'+rtrim(MIN(b.ID)) AS 重复记录IDs
FROM    t1 AS a
INNER JOIN t1 AS b ON a.ID<=b.ID
WHERE NOT EXISTS(SELECT 1 FROM t1 WHERE ID=a.ID-1 AND (c1<=a.c2 AND c2>=a.c1))
AND NOT EXISTS(SELECT 1 FROM t1 WHERE ID=b.ID+1 AND (c1<=b.c2 AND c2>=b.c1))
GROUP BY a.ID,a.c1,a.c2
HAVING a.ID!=MIN(b.ID)

/*
ID c1 c2 重复记录IDs
1 2014-01-29 08:00:00.000 2014-01-29 09:30:00.000 1~2
4 2014-02-01 10:00:00.000 2014-02-01 11:30:00.000 4~5
*/