sql >> Database teknologi >  >> RDS >> Oracle

Sådan finder du mest overlappende tidsperiode med datointervaller

Der er flere tilgange til dette. Man bruger korrelerede underforespørgsler. Det er ikke særlig sjovt. Lad os i stedet bruge den kumulative summetode, fordi du har Oracle.

Nøglen er at starte med en liste over tidsstempler med en værdi på +1 for en start og -1 for en afslutning. Dette er nemt:

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 kumulative sum af value fortæller dig antallet af aktive overlapninger på et givet tidspunkt:

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

Dette løser dit problem. Du vil sandsynligvis tilføje en order by numactives desc til de specifikke tidspunkter.



  1. iPhone humørikoner indsættes i MySQL, men bliver tom værdi

  2. Unity3D-forbindelse til MySQL-fejl

  3. Hvad er placeringen af ​​mysql-klienten .my.cnf i XAMPP til Windows?

  4. Sådan rettes fejl ved udførelse af DDL-ændringstabelhændelser drop fremmednøgle FKg0mkvgsqn8584qoql6a2rxheq via JDBC Statement