Connecting Tech Pros Worldwide Forums | Help | Site Map

deducing ranges in SQL

Oxnard
Guest
 
Posts: n/a
#1: Jun 27 '08
Oracle 9.2.0.6 in AIX

I am trying to find ranges and where the range ends for each d_no:
The increment of val is one

My example is:

select * from t1

d_no val
1 20
1 21
1 22
1 23
1 25
1 1503
1 1504
3 502
3 503
3 504
3 600

I am trying to come up with an SQL which would produce an output of

d_no the_range
1 20-23
1 25
1 1503-1504
3 502-504
3 600

I have tried using some of the analytic functions and got close with lead
but not quite. I could do a cursor in
PL/SQL but the table is so huge it takes way to long. In fact I did do this
on a small table. It worked just fine.
Also what I am showing as a table is really an in-line view of a couple of
tables I have joined.

Any ideas would really be helpful

Thank you



Bertrand Guillaumin
Guest
 
Posts: n/a
#2: Jun 27 '08

re: deducing ranges in SQL


Try something like this :

SELECT D_NO , to_char(Min(Val)) || '-' || to_char(Max(Val))
Group By D_No

Hope it will help.

Oxnard a écrit :
Quote:
Oracle 9.2.0.6 in AIX
>
I am trying to find ranges and where the range ends for each d_no:
The increment of val is one
>
My example is:
>
select * from t1
>
d_no val
1 20
1 21
1 22
1 23
1 25
1 1503
1 1504
3 502
3 503
3 504
3 600
>
I am trying to come up with an SQL which would produce an output of
>
d_no the_range
1 20-23
1 25
1 1503-1504
3 502-504
3 600
>
I have tried using some of the analytic functions and got close with lead
but not quite. I could do a cursor in
PL/SQL but the table is so huge it takes way to long. In fact I did do this
on a small table. It worked just fine.
Also what I am showing as a table is really an in-line view of a couple of
tables I have joined.
>
Any ideas would really be helpful
>
Thank you
>
>
Mark C. Stock
Guest
 
Posts: n/a
#3: Jun 27 '08

re: deducing ranges in SQL



"Oxnard" <oxnardNO_SPAM@comcast.netwrote in message
news:kcSdnbo_T9IT6Z_ZRVn-rA@comcast.com...
: Oracle 9.2.0.6 in AIX
:
: I am trying to find ranges and where the range ends for each d_no:
: The increment of val is one
:
: My example is:
:
: select * from t1
:
: d_no val
: 1 20
: 1 21
: 1 22
: 1 23
: 1 25
: 1 1503
: 1 1504
: 3 502
: 3 503
: 3 504
: 3 600
:
: I am trying to come up with an SQL which would produce an output of
:
: d_no the_range
: 1 20-23
: 1 25
: 1 1503-1504
: 3 502-504
: 3 600
:
: I have tried using some of the analytic functions and got close with lead
: but not quite. I could do a cursor in
: PL/SQL but the table is so huge it takes way to long. In fact I did do
this
: on a small table. It worked just fine.
: Also what I am showing as a table is really an in-line view of a couple of
: tables I have joined.
:
: Any ideas would really be helpful
:
: Thank you
:
:

what version of oracle and what have you tried?

++ mcs


Closed Thread


Similar Oracle Database bytes