Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Dapatkan amplop, yaitu rentang waktu yang tumpang tindih

Coba yang ini juga. Saya mengujinya sebaik mungkin, saya yakin ini mencakup semua kemungkinan, termasuk menggabungkan interval yang berdekatan (10:15 hingga 10:30 dan 10:30 hingga 10:40 digabungkan menjadi satu interval, 10:15 hingga 10:40 ). Ini juga harus cukup cepat, tidak menggunakan banyak.

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. insert massal dari Java ke Oracle

  2. Hilangkan duplikat menggunakan fungsi Oracle LISTAGG

  3. Cara membuat file spool skrip Oracle sql

  4. Konkurensi yang lebih baik di Oracle daripada SQL Server?

  5. Membuat penangan logging untuk terhubung ke Oracle?