Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách tìm khoảng thời gian trùng lặp nhất với các phạm vi ngày

Có một số cách tiếp cận để giải quyết vấn đề này. Một sử dụng các truy vấn con tương quan. Điều đó không vui lắm. Thay vào đó, hãy sử dụng phương pháp tính tổng tích lũy vì bạn có Oracle.

Điều quan trọng là bắt đầu với danh sách các dấu thời gian có giá trị +1 cho phần bắt đầu và -1 cho phần kết thúc. Điều này thật dễ dàng:

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

Bây giờ, tổng tích lũy của giá trị value cho bạn biết số lượng chồng chéo đang hoạt động tại bất kỳ thời điểm nào:

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

Điều này giải quyết vấn đề của bạn. Bạn có thể muốn thêm một đơn đặt hàng order by numactives desc cho thời gian cụ thể.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao chuyển đổi không hợp lệ được yêu cầu MÃ LỖI:17132?

  2. Trình tự trong SQL Select

  3. Hàm REPEAT tương đương trong Oracle

  4. Các tiêu đề cột liên tục xuất hiện trong suốt đầu ra của Oracle

  5. Oracle - Cập nhật các hàng có giá trị nhỏ nhất trong nhóm cột từ một bảng khác