Home » SQL & PL/SQL » SQL & PL/SQL » Generating the Range for the given dates (Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production)
Generating the Range for the given dates [message #620064] |
Mon, 28 July 2014 09:29 |
|
saipradyumn
Messages: 419 Registered: October 2011 Location: Hyderabad
|
Senior Member |
|
|
Hi All ,
Please help me to generate the range the dates if it is consecutive (continuous), other wise just need to display single date
drop table test_date;
create table test_date ( c_date date);
insert into test_date (C_DATE)
values (to_date('01-02-2003', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-04-2004', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-06-2005', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-04-2006', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-09-2006', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-12-2006', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-08-2007', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-11-2007', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-06-2008', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-09-2008', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-11-2008', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-12-2008', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-07-2014', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-07-2005', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-08-2005', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-09-2005', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-09-2007', 'dd-mm-yyyy'));
insert into test_date (C_DATE)
values (to_date('01-10-2007', 'dd-mm-yyyy'));
select * from test_date ;
Required out put :
Feb ,2013
Apr , 2014
June,2005 - Sep- 2005
Apr , 2006
Sep, 2006
Dec,2006
Aug 2007 - Nov 2007
My Ides is need to apply the Lead functions. but unable to generate the of unique identifier for each set of consecutive rows
select c_date,
nvl(lead(c_date) over(order by c_date), add_months(c_date, 1)) next_dt,
case
when add_months(c_date, 1) =
nvl(lead(c_date) over(order by c_date), add_months(c_date, 1)) then
-- row_number() over (order by 1)
0
else
row_number() over (order by 1)
end val
from test_date
order by c_date
Thanks
Sai Pradyumn
[Updated on: Mon, 28 July 2014 10:00] by Moderator Report message to a moderator
|
|
|
|
Re: Generating the Rage for the given dates [message #620067 is a reply to message #620064] |
Mon, 28 July 2014 09:59 |
|
Michel Cadot
Messages: 68645 Registered: March 2007 Location: Nanterre, France, http://...
|
Senior Member Account Moderator |
|
|
SQL> with
2 data as (select distinct trunc(c_date,'MONTH') mnth from test_date),
3 grouped as (
4 select mnth,
5 add_months(mnth,-row_number() over (order by mnth)) grp
6 from data
7 )
8 select to_char(min(mnth),'MM/YYYY') ||
9 decode(max(mnth),min(mnth),'', '-'||to_char(max(mnth),'MM/YYYY'))
10 range
11 from grouped
12 group by grp
13 order by grp
14 /
RANGE
---------------
02/2003
04/2004
06/2005-09/2005
04/2006
09/2006
12/2006
08/2007-11/2007
06/2008
09/2008
11/2008-12/2008
07/2014
|
|
|
|
|
Re: Generating the Range for the given dates [message #620085 is a reply to message #620064] |
Mon, 28 July 2014 12:26 |
Solomon Yakobson
Messages: 3273 Registered: January 2010 Location: Connecticut, USA
|
Senior Member |
|
|
Hierarchical query solution:
select connect_by_root to_char(c_date,'FMMonth, YYYY') ||
case when level > 1 then to_char(c_date,' - FMMonth, YYYY') end range
from test_date t1
where connect_by_isleaf = 1
start with not exists (select 1 from test_date t2 where t2.c_date = add_months(t1.c_date,-1))
connect by c_date = add_months(prior c_date,1)
order by c_date
/
RANGE
-------------------------------
February, 2003
April, 2004
June, 2005 - September, 2005
April, 2006
September, 2006
December, 2006
August, 2007 - November, 2007
June, 2008
September, 2008
November, 2008 - December, 2008
July, 2014
11 rows selected.
SQL>
SY.
|
|
|
Goto Forum:
Current Time: Fri Apr 26 00:27:57 CDT 2024
|