Query based recovering on the previous and after lines... pls help

  CREATE TABLE "POP"."RP06" 
   (     "NUM" NUMBER(7,0), 
     "SEQ_LINE" NUMBER(7,0), 
     "CHMP" VARCHAR2(4000 BYTE)
   ) 

Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,1,'( ');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,2,'ORACLE  IS  GREAT');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,3,'AND ');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,4,'ORACLE  IS  GREAT');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,5,'OR ');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,6,'ORACLE  IS  GREAT');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,7,'AND /*4*/ ');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,8,'ORACLE  IS  GREAT');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,9,'OR ');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,10,'ORACLE  IS  GREAT');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,11,'AND ');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,12,'ORACLE  IS  GREAT');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,13,'OR ');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,14,'ORACLE  IS  GREAT');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,15,'OR ');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,16,'ORACLE  IS  GREAT');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,17,'AND ');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,18,'ORACLE  IS  GREAT');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,19,') ');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,20,'AND /*10*/ ');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,21,'ORACLE  IS  GREAT');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,22,'AND /*11*/ ');
Insert into RP06 (NUM,SEQ_LINE,CHMP) values (100,23,'ORACLE  IS  GREAT');
After inserting the lines I want to extract the lines as follows

1 Select the chmp which satisfies the condition if the chmp has previous row is 'AND' * and rank according to 'OR' * example: chmp with seq_line 4 that has precedent 'AND' seq_line 'GOLD' in seq_line and 3 5. then retrieve the 4th seq_line chmp.
(CHMP WITH 8,12 SEQ_LINE ARE other EXAMPLES)


(2) select the chmp which satisfies the condition if the chmp has previous row is * "GOLD" and the next row "AND."
example: chmp with 10 seq_line who has previous "OR" in seq_line 9 and 'AND' in seq_line 11. then retrieve the 10th seq_line chmp.

(CHMP WITH 6.16 SEQ_LINE ARE other EXAMPLES)

Kindly help

S

OK, this is # 1:

select num, seq_line, chmp
from (
select num, seq_line, chmp,
lag(chmp) over (partition by num order by seq_line) prevchmp,
lead(chmp) over (partition by num order by seq_line) nextchmp
from rp06
where num=100
)
where prevchmp like 'AND %'
and nextchmp like 'OR %';

       NUM   SEQ_LINE CHMP
---------- ---------- --------------------
       100          4 ORACLE  IS  GREAT
       100          8 ORACLE  IS  GREAT
       100         12 ORACLE  IS  GREAT

and for #2:

select num, seq_line, chmp
from (
select num, seq_line, chmp,
lag(chmp) over (partition by num order by seq_line) prevchmp,
lead(chmp) over (partition by num order by seq_line) nextchmp
from rp06
where num=100
)
where prevchmp like 'OR %'
and nextchmp like 'AND %';

       NUM   SEQ_LINE CHMP
---------- ---------- --------------------
       100          6 ORACLE  IS  GREAT
       100         10 ORACLE  IS  GREAT
       100         16 ORACLE  IS  GREAT

------
[edit]
Seeing how many answers you all of a sudden, you realize how to order the issues in the case.
;)

Tags: Database

Similar Questions

Maybe you are looking for