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

Các phép toán Đại số khoảng cách của Allen trong SQL

Đây là demo SQLFiddle Trước hết, hãy tạo bảng tạm để đơn giản hóa các truy vấn mặc dù bạn có thể đặt các truy vấn tạo này vào các truy vấn cuối cùng và thực hiện mà không cần bảng tạm:

create table t as select * from
(
select null s ,"start"-1 as e  from data
union all
select "start" s,null e  from data
union all
select "end"+1 s ,null e  from data
union all
select null s ,"end" e  from data
) d where exists (select "start" 
                  from data where d.s between data."start" and data."end"
                               or d.e between data."start" and data."end"
                                );
--Operation 1 - Disjoined Result   
create table t1 as select s,e,e-s+1 width from
(
select distinct s,(select min(e) from t where t.e>=t1.s) e from t t1
) t2 where t2.s is not null and t2.e is not null;

--Operation 2 - Reduced Result
create table t2 as 
select s,e,e-s+1 width from
(
select s,(select min(d2.e) from t1 d2 where d2.s>=d.s and not exists
          (select s from t1 where t1.s=d2.e+1) ) e
from
t1 d where not exists(select s from t1 where t1.e=d.s-1) 
) t2;

--Temp table for Operation 3 - Gaps
create table t3 as 
select null s, s-1 e from t2
union all
select e+1 s, null e from t2;

Bây giờ đây là các truy vấn:

--Operation 1 - Disjoined Result
select * from t1 order by s;

--Operation 2 - Reduced Result


select * from t2 order by s;

--Operation 3 - Gaps

select s,e,e-s+1 width 
from
(
select s,(select min(e) from t3 where t3.e>=d.s) e from t3 d
) t4 where s is not null and e is not null
order by s;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể chạy truy vấn chọn động lớn trong thủ tục được lưu trữ

  2. Oracle SQL ngày đầu tiên và ngày cuối cùng của quý bất kỳ năm nào

  3. Làm thế nào để tạo gói trong Oracle SQL Developer?

  4. Nhà tiên tri. Thiếu từ khóa khi sử dụng câu lệnh viết hoa. Lỗi 00905

  5. Thêm thẻ Html vào tiêu đề của truy vấn Cây trong Oracle APEX