Istnieje kilka podejść do tego. Jeden używa skorelowanych podzapytań. To nie jest zabawne. Zamiast tego użyjmy metody sumy skumulowanej, ponieważ masz Oracle.
Kluczem jest rozpoczęcie od listy sygnatur czasowych o wartości +1 dla początku i -1 dla końca. To proste:
select t.*
from ((select starttime as thetime, 1 as value from table t) union all
(select endtime, -1 as value from table t)
) t
Teraz skumulowana suma value
informuje o liczbie aktywnych nakładek w danym momencie:
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
To rozwiązuje twój problem. Prawdopodobnie chcesz dodać order by numactives desc
w określonych godzinach.