create table t (val number not null);
insert into t values (1 );
insert into t values (2 );
insert into t values (3 );
insert into t values (4 );
insert into t values (8 );
insert into t values (9 );
insert into t values (10);
insert into t values (11);
insert into t values (12);
insert into t values (13);
insert into t values (20);
insert into t values (21);
insert into t values (22);
insert into t values (23);
insert into t values (24);
commit;
with lData as (
select val,
lag(val, 1) over (order by val) as lag_val,
lead(val, 1) over (order by val) as lead_val
from t),
lDataBound as (
select val,
lag_val,
case when (lag_val is null) or (val != lag_val + 1) then 'Y'
else 'N' end as lower_bound,
case when (lead_val is null) or (val != lead_val - 1) then 'Y'
else 'N' end as upper_bound
from lData),
lData_upper_bound as (
select val,
row_number() over (order by val) as rn
from lDataBound
where upper_bound = 'Y'),
lData_lower_bound as (
select val,
row_number() over (order by val) as rn
from lDataBound
where lower_bound = 'Y')
select a.val as lower_bound,
b.val as upper_bound
from lData_lower_bound a
join lData_upper_bound b
on b.rn = a.rn
order by a.rn;
LOWER_BOUND UPPER_BOUND
----------- -----------
1 4
8 13
20 24
Regards
Benoit
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Oracle PL/SQL" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/Oracle-PLSQL?hl=en
-~----------~----~----~----~------~----~------~--~---