Home » SQL & PL/SQL » SQL & PL/SQL » Duplicate/Split rows per week
Duplicate/Split rows per week [message #243606] |
Fri, 08 June 2007 00:17 |
thandavakarumuri
Messages: 64 Registered: May 2005
|
Member |
|
|
Hi Experts,
I have Vista Home edition my laptop and I have installed oracle 10.2.0.3.0 recently. While installing oracle gave me a link
with my laptop name to use oracle from browser. (http://ktishna-laptop.....).
This is first time am looking at 10g. I have created an user from the web but am not able to create roles and provide privileges to my user. I hope we can do it using sql*plus by writing grant create/insert to user name.
But i would like to know how to do it from enterprise manager which looks like an web application page. I am trying to do it with foll navigation
(database->administration-> users->edit->) after this i don't find any values under roles, object privileges tabs to provide privileges to my user name.
Do we need to setup some thing before doing this? Can some one help me regarding?
And one more help needed on SQL question:
I have following table and data.
Date1 Date2 val
-------- --------- ---
5/1/2007 5/15/2007 42
5/16/2007 6/15/2007 43
I am trying to get the put as mentioned below. o/p should display the value per week. Week starts on Sat(7) and ends on Friday(6). All i need to do is break into display value per week.
required Output:
From To val
-------- --------- ---
5/1/2007 5/4/2007 42
5/5/2007 5/11/2007 42
5/12/2007 5/15/2007 42
5/16/2007 5/18/2007 43
5/19/2007 5/25/2007 43
5/26/2007 6/1/2007 43
6/2/2007 6/8/2007 43
6/9/2007 6/15/2007 43
select date1,
lag(next_day(date1,'friday')) over(order by date1) nxt_wk1,
val
from dates;
I have got the output:
From To Val
---- --------- ---
5/1/2007
5/16/2007 5/4/2007 42
similar query:
select date1, date2, val,
lag(next_day(date1,'friday')) over(order by(next_day(date1,'friday'))) nx11,
lag(next_day(date2,'friday')) over(order by(next_day(date2,'friday'))) nx12,
lead(next_day(date1,'friday')) over(order by(next_day(date1,'friday'))) nx21,
lead(next_day(date2,'friday')) over(order by(next_day(date2,'friday'))) nx22
from dates;
I hope it is working fine for a single record. If yes, it has to apply for all the rows in a table using single sql statement. OR I would appreciate if some one could help me in their own way.I need lots of inputs from experts regarding this. So that i can understand better and i can learn more tech stuff from the forum.
Thanks in advance,
Tandava
[Updated on: Fri, 08 June 2007 00:49] by Moderator Report message to a moderator
|
|
|
|
Re: Duplicate/Split rows per week [message #243633 is a reply to message #243606] |
Fri, 08 June 2007 02:28 |
|
Michel Cadot
Messages: 68645 Registered: March 2007 Location: Nanterre, France, http://...
|
Senior Member Account Moderator |
|
|
drop table t;
create table t (date1 date, date2 date, val integer);
insert into t values(to_date('5/1/2007','MM/DD/YYYY'),
to_date('5/15/2007','MM/DD/YYYY'),
42);
insert into t values(to_date('5/16/2007','MM/DD/YYYY'),
to_date('6/15/2007','MM/DD/YYYY'),
43);
commit;
alter session set nls_date_format='MM/DD/YYYY' nls_date_language=american;
SQL> select * from t;
DATE1 DATE2 VAL
---------- ---------- ----------
05/01/2007 05/15/2007 42
05/16/2007 06/15/2007 43
2 rows selected.
SQL> with
2 weeks as (
3 select mindate+7*(rownum-1) begwk,
4 mindate+7*(rownum-1)+6 endwk
5 from (select next_day(min(date1)-6,'SATURDAY') mindate,
6 next_day(max(date2)+6,'FRIDAY') maxdate from t)
7 connect by level <= trunc((maxdate-mindate)/7)
8 )
9 select greatest(nvl(date1, date '0001-01-01'),begwk) "From",
10 least(nvl(date2, date '9999-12-31'),endwk) "To",
11 val "Val"
12 from t partition by (date1,val)
13 right outer join weeks w
14 on ( 1 = 1 )
15 where w.begwk >= t.date1-6 and w.endwk <= t.date2+6
16 /
From To Val
---------- ---------- ----------
05/01/2007 05/04/2007 42
05/05/2007 05/11/2007 42
05/12/2007 05/15/2007 42
05/16/2007 05/18/2007 43
05/19/2007 05/25/2007 43
05/26/2007 06/01/2007 43
06/02/2007 06/08/2007 43
06/09/2007 06/15/2007 43
8 rows selected.
Regards
Michel
|
|
|
Goto Forum:
Current Time: Thu Apr 25 03:41:12 CDT 2024
|