Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да намерите най-припокриващия се период от време с периоди от време

Има няколко подхода за това. Човек използва корелирани подзаявки. Това не е много забавно. Вместо това нека използваме метода на кумулативната сума, защото имате Oracle.

Ключът е да започнете със списък от времеви марки със стойност +1 за начало и -1 за край. Това е лесно:

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

Сега кумулативната сума на value ви казва броя на активните припокривания във всеки даден момент:

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

Това решава вашия проблем. Вероятно искате да добавите order by numactives desc за конкретните часове.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Заявка за получаване на най-новия запис и (в случай на равенство) с по-високата стойност или процент по карта и услуга

  2. JDBC ResultSet getDate губи прецизност

  3. Как да видите типа на променлива в PL/SQL динамично?

  4. java.lang.ClassCastException:oracle.sql.BLOB не може да бъде прехвърлен към oracle.sql.BLOB

  5. Как да изведете резултата от oracle sql във файл в Windows?