Urgent
Teradata Teradata Discussion Forums Teradata.com Discussion Forum
Visit Teradata.com
Home       Guidelines    Member List
Welcome Guest ( Login | Register )
        


This online forum is for user-to-user discussions of Teradata products, and is not an official customer support channel for Teradata. If you require direct assistance, please contact Teradata support.


Urgent Expand / Collapse
Author
Message
Posted 5/6/2008 1:15:26 AM
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

Group: Forum Members
Last Login: 5/23/2008 12:35:46 PM
Posts: 29, Visits: 63
Hi all,


I am having following sort of i/p.

City_Id From_dt To_dt Loc_cd
1 A B 0
1 B+1 C 0
1 C+1 D 1
1 D+1 E 1
1 E+1 F 0
1 F+1 G 0
2 A' B' 0
2 B'+1 C' 0
2 C'+1 D' 1
2 D'+1 E' 1
2 E'+1 F' 0
2 F'+1 G' 0


And O/P SHOULD BE :


City_Id From_dt To_dt Loc_cd
1 A C 0
1 C+1 E 1
1 E+1 G 0
2 A' C' 0
2 C'+1 E' 1
2 E'+1 F' 0



So is it possible using SQL only?


Regards,
Gander_ss
Post #11370
Posted 5/8/2008 10:49:40 AM
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

Group: Forum Members
Last Login: 6/25/2008 7:26:06 AM
Posts: 474, Visits: 202
There are lots of solutions, i'lll show just two of them.
You'll have to pick one appropriate for your problem.

Dieter


DROP TABLE dropme;

CREATE TABLE dropme
( City_Id INT
,From_dt DATE
,To_dt DATE
,Loc_cd INT
);
INSERT INTO dropme VALUES(1, DATE '2008-01-01', DATE '2008-02-01', 0);
INSERT INTO dropme VALUES(1, DATE '2008-02-02', DATE '2008-03-01', 0);
INSERT INTO dropme VALUES(1, DATE '2008-03-02', DATE '2008-04-01', 0);
INSERT INTO dropme VALUES(1, DATE '2008-04-02', DATE '2008-04-01', 1);
INSERT INTO dropme VALUES(1, DATE '2008-05-02', DATE '2008-05-01', 1);
INSERT INTO dropme VALUES(1, DATE '2008-06-02', DATE '2008-06-01', 1);
INSERT INTO dropme VALUES(1, DATE '2008-07-02', DATE '2008-07-01', 0);
INSERT INTO dropme VALUES(1, DATE '2008-08-02', DATE '2008-08-01', 0);
INSERT INTO dropme VALUES(1, DATE '2008-09-02', DATE '2008-09-01', 0);
INSERT INTO dropme VALUES(1, DATE '2008-10-02', DATE '2008-10-01', 0);
INSERT INTO dropme VALUES(1, DATE '2008-11-02', DATE '2008-11-01', 1);


INSERT INTO dropme SELECT city_id + 1, from_dt + 20, to_dt + 20, loc_cd FROM dropme;

SELECT
city_id
,MIN(from_dt)
,MAX(to_dt)
,loc_cd
FROM
(
SELECT
City_Id
,From_dt
,To_dt
,Loc_cd
,RANK() OVER (PARTITION BY city_id ORDER BY from_dt) AS r1
,RANK() OVER (PARTITION BY city_id, loc_cd ORDER BY from_dt) AS r2
FROM dropme
) dt
GROUP BY city_id, loc_cd, r2-r1
ORDER BY 1,2;

SELECT
city_id
,MIN(from_dt)
,MAX(to_dt)
,loc_cd
FROM
(
SELECT
city_id
,from_dt
,to_dt
,loc_cd
,SUM(x) OVER
(PARTITION BY city_id
ORDER BY from_dt
ROWS UNBOUNDED PRECEDING) AS grp
FROM
(
SELECT
City_Id
,From_dt
,To_dt
,Loc_cd
,MIN(loc_cd) OVER (PARTITION BY city_id
ORDER BY from_dt
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev
,CASE WHEN prev = loc_cd THEN 0 ELSE 1 END AS x
FROM dropme
) dt
) dt
GROUP BY city_id, loc_cd,grp
ORDER BY 1,2

Post #11389
Posted 5/13/2008 4:39:30 AM
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

Group: Forum Members
Last Login: 5/23/2008 12:35:46 PM
Posts: 29, Visits: 63
Thanks a lot for solution....


But I want to know what is role of r2-r1 in group by.

And I want to know more abt rank() function.

so can u suggest any site or else.



Thanks,
gander_ss
Post #11421
« Prev Topic | Next Topic »


Reading This Topic Expand / Collapse
Active Users: 0 ( 0 guests, 0 members, 0 anonymous members )
No members currently viewing this topic.


All times are GMT -5:00, Time now is 10:27pm

Powered By InstantForum.NET v4.1.4 © 2008
Execution: 0.781. 10 queries. Compression Disabled.