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

Операции на алгебрата на интервалите на Алън в SQL

Ето демонстрация на SQLFiddle Първо създайте временни таблици, за да опростите заявките, въпреки че можете да поставите тези заявки за създаване в крайни заявки и да го направите без временни таблици:

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;

Сега има заявки:

--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. cx_Oracle:Как да обходя набор от резултати?

  2. Има ли начин да дадете псевдоним на подзаявка в Oracle 11g SQL?

  3. Как да създадете чужд ключ в Oracle SQL Developer?

  4. Oracle ListaGG, Топ 3 най-често срещани стойности, дадени в една колона, групирани по ID

  5. Намерете Weblogic Server Версия/Пачове в EBS R12.2/ Самостоятелен Weblogic