mssql存储过程,怎么过滤数据库中时间段重复的数据,获得实际时间

mssql存储过程,如何过滤数据库中时间段重复的数据,获得实际时间?
如:id                           begintime                          endtime
       1                             2014-04-18 10:00:00       2014-04-18 10:50:00
       1                             2014-04-18 10:30:00       2014-04-18 11:00:00
       1                             2014-04-18 10:10:00       2014-04-18 12:30:00
       1                             2014-04-18 10:10:00       2014-04-18 12:30:00
       1                             2014-04-18 11:30:00       2014-04-18 12:00:00
       1                             2014-04-18 11:30:00       2014-04-18 12:00:00

比如像上面这样的一组数据,如何去除他的重复时间段,获得ID=1消耗的总时间分数?

感谢大虾帮忙!!!
------解决方案--------------------
不好意思,有点忙,写了一个,有点复杂。。
--> 测试数据[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([id] int,[begintime] datetime,[endtime] datetime)
insert [huang]
select 1,'2014-04-18 10:00:00','2014-04-18 10:50:00' union all
select 1,'2014-04-18 10:30:00','2014-04-18 11:00:00' union all
select 1,'2014-04-18 10:10:00','2014-04-18 12:30:00' union all
select 1,'2014-04-18 10:10:00','2014-04-18 12:30:00' union all
select 1,'2014-04-18 11:30:00','2014-04-18 12:00:00' union all
select 1,'2014-04-18 11:30:00','2014-04-18 12:00:00' union all
select 1,'2014-04-18 15:30:00','2014-04-18 16:00:00'
union all
select 2,'2014-04-18 15:30:00','2014-04-18 16:00:00'
UNION ALL 
select 2,'2014-04-18 10:00:00','2014-04-18 10:50:00' union all
select 2,'2014-04-18 10:30:00','2014-04-18 11:00:00' union all
select 2,'2014-04-18 10:10:00','2014-04-18 12:30:00' union all
select 2,'2014-04-18 10:10:00','2014-04-18 12:30:00' union all
select 2,'2014-04-18 11:30:00','2014-04-18 12:00:00' union all
select 2,'2014-04-18 11:30:00','2014-04-18 12:00:00' union all
select 2,'2014-04-18 15:30:00','2014-04-18 16:00:00'
--------------生成数据--------------------------




;WITH cte AS (
select DISTINCT *from [huang]),
cte2 AS 
(
SELECT * ,ROW_NUMBER()OVER(PARTITION BY id ORDER BY begintime)oid 
FROM cte 
)
--SELECT * FROM cte2

,cte3 AS 
(
SELECT *
FROM cte2
WHERE oid=1
UNION ALL 
SELECT a.id,CASE WHEN a.begintime BETWEEN b.begintime AND  b.endtime    THEN b.begintime ELSE a.begintime END begintime,
CASE WHEN a.endtime BETWEEN b.begintime AND b.endtime AND b.endtime > a.endtime   THEN b.endtime ELSE a.endtime END endtime,a.oid
FROM cte2 a INNER JOIN cte3 b ON a.id=b.id AND a.oid=b.oid+1
) ,cte4 AS (
SELECT DISTINCT id,begintime,endtime
FROM cte3 )
SELECT id,SUM(DATEDIFF(minute,begintime,endtime ))[总分钟数]
FROM (
SELECT *,ROW_NUMBER()OVER(PARTITION BY id,begintime ORDER BY endtime DESC )oid
FROM cte4 )a 
WHERE oid=1
GROUP BY id

----------------结果----------------------------
/* 
id          总分钟数
----------- -----------
1           180
2           180

*/