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

SQL Challenge / Puzzle:Làm thế nào để hợp nhất các phạm vi lồng nhau?

Giải pháp Oracle:

with l as ( select level lvl from dual connect by level < 66 ),
     r as ( select range_start r1, range_end r2, range_val v, 
                    range_end - range_start + 1 cnt 
              from ranges ),
     t1 as (select distinct lvl, 
                   nvl(max(v) keep (dense_rank first order by cnt) 
                              over (partition by lvl), '*' ) m
              from l left join r on lvl between r1 and r2 ),
     t2 as (select lvl, m, case when lag(m) over (order by lvl) <> m then 0 else 1 end mrk 
              from t1),
     t3 as (select lvl, m, lvl - sum(mrk) over (order by lvl) grp from t2)
select min(lvl) r1, max(lvl) r2, nullif(min(m), '*') val
  from t3 group by grp order by r1

Đầu ra theo yêu cầu. Tiếng Anh của tôi chưa tốt nên rất khó để giải thích, nhưng chúng ta hãy thử:

  • l - bộ tạo số,
  • r - dữ liệu từ ranges với khoảng cách được tính,
  • t1 - tìm giá trị với khoảng cách tối thiểu cho mỗi lvl,
  • t2 - thêm các điểm đánh dấu cho biết nếu phạm vi bắt đầu,
  • t3 - thêm cột mà chúng tôi sẽ sử dụng dữ liệu giả mạo tiếp theo.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL Developer - Cửa sổ kết quả truy vấn bị thiếu lưới

  2. Sử dụng Oracle JDeveloper 12c với Cơ sở dữ liệu Oracle, Phần 2

  3. Làm thế nào để bạn tìm hiểu về các tính năng không dùng nữa trong bản phát hành mới của Oracle?

  4. Oracle, cách mở con trỏ và chọn một cột trong số nhiều cột vào một biến

  5. Cơ sở dữ liệu sao chép Oracle SQL Developer từng bước