Missing numbers in a sequence [message #443681] |
Tue, 16 February 2010 23:29 |
aijaz786
Messages: 91 Registered: February 2010
|
Member |
|
|
create table t (
number_from number,
number_to number);
insert into t values(1,3);
insert into t values(5,9);
insert into t values(10,15);
commit;
I need to create a stored function that could find/return missing numbers between number_from and number_to for each record in table t.
For example:
Number_from Number_to missing
1 3
5 9 4 from previous record, this record is supposed to start from 4
Thanks.
|
|
|
|
|
|
|
Re: Missing numbers in a sequence [message #443689 is a reply to message #443685] |
Wed, 17 February 2010 00:11 |
|
ramoradba
Messages: 2456 Registered: January 2009 Location: AndhraPradesh,Hyderabad,I...
|
Senior Member |
|
|
SQL> with
2 data as (
3 select number_from, number_to,
4 lag(number_to) over ( order by number_from) prev_number_to
5 from tt
6 )
7 select number_from, number_to, prev_number_to,
8 decode(number_from-prev_number_to,2,to_char(prev_number_to+1)||' is missing',
'Nothing is missing') extra
9 from data
10 /
NUMBER_FROM NUMBER_TO PREV_NUMBER_TO EXTRA
----------- ---------- -------------- ---------------------------------------------------
1 3 Nothing is missing
5 9 3 4 is missing
10 15 9 Nothing is missing
SQL>
I am Just giving hint modify it as per your second reuirement.
sriram
[Updated on: Wed, 17 February 2010 00:57] by Moderator Report message to a moderator
|
|
|
Re: Missing numbers in a sequence [message #443692 is a reply to message #443681] |
Wed, 17 February 2010 00:35 |
|
Michel Cadot
Messages: 68645 Registered: March 2007 Location: Nanterre, France, http://...
|
Senior Member Account Moderator |
|
|
SQL> with
2 limits as (
3 select min(number_from) minnum, max(number_to) maxnum from t
4 ),
5 numbers as (
6 select minnum+level-1 num from limits connect by level <= maxnum-minnum+1
7 )
8 select num from numbers
9 minus
10 select num
11 from t, numbers
12 where num between number_from and number_to
13 order by 1
14 /
NUM
----------
4
Regards
Michel
[Updated on: Wed, 17 February 2010 00:35] Report message to a moderator
|
|
|
Re: Missing numbers in a sequence [message #443695 is a reply to message #443681] |
Wed, 17 February 2010 00:52 |
aijaz786
Messages: 91 Registered: February 2010
|
Member |
|
|
Thanks guys for all your help.
I just need advice. In my database, number_from and number_to are defiend as varchar2 type.
I am getting Invalid number error. My mistake that I forgot to mention that number_from and number_to columns are varchar2 type not number
Please advise.
Thanks.
|
|
|
|
|
Re: Missing numbers in a sequence [message #443698 is a reply to message #443695] |
Wed, 17 February 2010 00:57 |
|
Michel Cadot
Messages: 68645 Registered: March 2007 Location: Nanterre, France, http://...
|
Senior Member Account Moderator |
|
|
Quote:I am getting Invalid number error. My mistake that I forgot to mention that number_from and number_to columns are varchar2 type not number
If numbers are not numbers then either fix your numbers or change the requirements.
We can't choose and do it for you.
Regards
Michel
[Updated on: Wed, 17 February 2010 00:58] Report message to a moderator
|
|
|
|
|
Re: Missing numbers in a sequence [message #443703 is a reply to message #443681] |
Wed, 17 February 2010 01:03 |
mamalik
Messages: 268 Registered: November 2008 Location: Pakistan
|
Senior Member |
|
|
Dear Michle Uncle
we are using oracle 10 g. but with clause is not working . I think there is porblem at our end and we don't know how to use it.
i wrote follwoing query to find out missing number.
select b.ide from a,(select rownum ide from dual connect by level<=100) b
where a.ide(+)=b.ide
and a.ide is null
but i want to give maximum value of serial in place of 100 in connect by level clause.
thanks a lot.
Regards.
Asif.
[Updated on: Wed, 17 February 2010 01:04] Report message to a moderator
|
|
|
|
|
|
|
Re: Missing numbers in a sequence [message #443715 is a reply to message #443714] |
Wed, 17 February 2010 01:47 |
|
ramoradba
Messages: 2456 Registered: January 2009 Location: AndhraPradesh,Hyderabad,I...
|
Senior Member |
|
|
SQL> desc ttt
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NUMBER_FROM VARCHAR2(10)
NUMBER_TO VARCHAR2(10)
SQL> select * from ttt
2 ;
NUMBER_FRO NUMBER_TO
---------- ----------
1 3
5 9
10 15
16 19
23 24
SQL> with
2 limits as (
3 select min(to_number(number_from)) minnum, max(to_number(number_to)) maxnum from ttt
4 ),
5 numbers as (
6 select minnum+level-1 num from limits connect by level <= maxnum-minnum+1
7 )
8 select num from (
9 select minnum+level-1 num from limits connect by level <= maxnum-minnum+1
10 )
11 minus
12 select num
13 from ttt, numbers
14 where num between to_number(number_from) and to_number(number_to)
15 order by 1
16 /
NUM
----------
4
20
21
22
SQL>
sriram
[Updated on: Wed, 17 February 2010 01:50] Report message to a moderator
|
|
|
|
|
|
|
|
|