考虑一个包含时间间隔信息的表格,如下所示:
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。
答案 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)