Dazu gibt es mehrere Ansätze. Man verwendet korrelierte Unterabfragen. Das macht nicht viel Spaß. Lassen Sie uns stattdessen die kumulative Summenmethode verwenden, weil Sie Oracle haben.
Der Schlüssel ist, mit einer Liste von Zeitstempeln mit einem Wert von +1 für den Anfang und -1 für das Ende zu beginnen. Das ist ganz einfach:
select t.*
from ((select starttime as thetime, 1 as value from table t) union all
(select endtime, -1 as value from table t)
) t
Nun die kumulierte Summe des value
gibt Ihnen die Anzahl aktiver Überschneidungen zu einem bestimmten Zeitpunkt an:
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
Dies löst Ihr Problem. Wahrscheinlich möchten Sie eine order by numactives desc
hinzufügen für die bestimmten Zeiten.