Det finns flera tillvägagångssätt för detta. Man använder korrelerade delfrågor. Det är inte särskilt kul. Låt oss istället använda den kumulativa summametoden eftersom du har Oracle.
Nyckeln är att börja med en lista med tidsstämplar med värdet +1 för en start och -1 för ett slut. Det här är enkelt:
select t.*
from ((select starttime as thetime, 1 as value from table t) union all
(select endtime, -1 as value from table t)
) t
Nu, den kumulativa summan av value
talar om för dig antalet aktiva överlappningar vid varje given tidpunkt:
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
Detta löser ditt problem. Du vill förmodligen lägga till en order by numactives desc
för de specifika tiderna.