计算时间间隔的总秒数

时间:2012-12-03 11:20:39

标签: tsql

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

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。

1 个答案:

答案 0 :(得分:1)

以下是一个示例,该脚本正在查找秒数未包含在任何行中的间隔,并从第一个' start'之间的秒数之和中减去它。最后'结束'该脚本假设启动时间始终小于或等于结束时间

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)