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

Вземете плик, т.е. припокриващи се времеви интервали

Опитайте и този. Тествах го възможно най-добре, вярвам, че покрива всички възможности, включително обединяване на съседни интервали (10:15 до 10:30 и 10:30 до 10:40 се комбинират в един интервал, 10:15 до 10:40 ). Освен това трябва да е доста бързо, не използва много.

with m as
        (
         select ip_address, start_time,
                   max(stop_time) over (partition by ip_address order by start_time 
                             rows between unbounded preceding and 1 preceding) as m_time
         from ip_sessions
         union all
         select ip_address, NULL, max(stop_time) from ip_sessions group by ip_address
        ),
     n as
        (
         select ip_address, start_time, m_time 
         from m 
         where start_time > m_time or start_time is null or m_time is null
        ),
     f as
        (
         select ip_address, start_time,
            lead(m_time) over (partition by ip_address order by start_time) as stop_time
         from n
        )
select * from f where start_time is not null
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да направите настройка на sql в Oracle

  2. Как да получа генерирани ключове от JDBC пакетно вмъкване в Oracle?

  3. показване на персонализиран sql текст от резултата от колоната на таблицата

  4. ORA-01031:недостатъчни привилегии при избор на изглед

  5. Създаване на централен изглед в SQL от SQL таблица