これにはいくつかのアプローチがあります。 1つは相関サブクエリを使用します。それはあまり楽しいことではありません。代わりに、Oracleを使用しているため、累積合計法を使用しましょう。
重要なのは、開始の値が+1、終了の値が-1のタイムスタンプのリストから開始することです。これは簡単です:
select t.*
from ((select starttime as thetime, 1 as value from table t) union all
(select endtime, -1 as value from table t)
) t
ここで、value
の累積合計 任意の時点でのアクティブなオーバーラップの数を示します:
select t.*, sum(value) over (order by thetime) as numactives
from ((select starttime as thetime, 1 as value from table t) union all
(select endtime, -1 as value from table t)
) t
これはあなたの問題を解決します。 order by numactives desc
を追加することをお勧めします 特定の時間に。