sql >> Databáze >  >> RDS >> Oracle

Jak najít nejvíce se překrývající časové období s obdobími

K tomu existuje několik přístupů. Jeden používá korelované poddotazy. To není moc zábavné. Místo toho použijme metodu kumulativního součtu, protože máte Oracle.

Klíčem je začít se seznamem časových razítek s hodnotou +1 pro začátek a -1 pro konec. Je to snadné:

select t.*
from ((select starttime as thetime, 1 as value from table t) union all
      (select endtime, -1 as value from table t)
     ) t

Nyní kumulativní součet value vám říká počet aktivních překrytí v daném okamžiku:

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

Tím je váš problém vyřešen. Pravděpodobně budete chtít přidat order by numactives desc pro konkrétní časy.



  1. Podivné chování úplného vnějšího spojení v Oracle – jak by se to dalo vysvětlit?

  2. VLOŽENÍ MySQL... PŘI AKTUALIZACI DUPLIKÁTNÍHO KLÍČE v Javě:Jak se liší stavy vložení/aktualizace/beze změny

  3. Dynamický pivot MySQL

  4. Kód při spuštění otevře připojení jdbc, ale netiskne data tabulky. Co je na tomto kódu špatného?