1

考虑一个包含时间间隔信息的表,如下所示:

ID  StartTime             EndTime
==================================================
1   2012-11-22 06:14:10   2012-11-22 06:18:00
2   2012-11-22 06:16:10   2012-11-22 06:19:40
3   2012-11-22 06:20:50   2012-11-22 06:21:20
4   2012-11-22 06:22:30   2012-11-22 06:23:00
5   2012-11-22 06:22:10   2012-11-22 06:24:40
..................................................
..................................................

问题是找到更好的 t-sql 方法来计算这些间隔的总秒数,只考虑一次交叉路口时间。

例如,前三个记录的总秒数为 360。

4

1 回答 1

1

这是一个示例,脚本正在查找任何行中不包含秒数的间隔,并将其从第一个“开始”和最后一个“结束”之间的秒数之和中减去。该脚本假设开始时间总是小于或等于结束时间

select max(totalsec) - coalesce(sum(datediff(second, t.endtime, a.starttime)),0) from <table> t
cross apply
(select min(starttime) starttime from <table> where t.endtime < starttime) a
cross apply(select datediff(second, min(starttime), max(endtime)) totalsec from <table>) b
where 
not exists (select 1 from <table> where id <> t.id and t.endtime >= starttime and t.endtime < endtime)
于 2012-12-03T13:22:33.040 回答