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
..................................................
..................................................

問題は、交差時間を1回だけ考慮して、これらの間隔の合計秒数を計算するためのより良いt-sql方法を見つけることです。

たとえば、最初の 3 つのレコードの合計秒数は 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 に答える