2016-07-15 18 views
0

ich eine Tabelle, die wie unten zeigt:wählen Zeilen zwischen zwei Zeichenwerte einer Spalte

S.No | Action 
1  | New 
2  | Dependent 
3  | Dependent 
4  | Dependent 
5  | New 
6  | Dependent 
7  | Dependent 
8  | New 
9  | Dependent 
10  | Dependent 

ich die Zeilen zwischen den ersten beiden ‚Neu‘ wollen Werte in der Spalte Aktion hier zur Auswahl, einschließlich der erste Zeile mit der Aktion "Neu". Wie [Neu, Neu]

Zum Beispiel: In diesem Fall möchte ich Zeilen 1,2,3,4 auswählen.

Bitte lassen Sie mich wissen, wie dies zu tun ist.

Antwort

5

Hmmm. Lassen Sie uns die kumulative Anzahl von Malen zählen, dass New als Wert erscheint und verwenden, die:

select t.* 
from (select t.*, 
      sum(case when action = 'New' then 1 else 0 end) over (order by s_no) as cume_new 
     from t 
    ) t 
where cume_new = 1; 
0

Sie etwas Magie mit analytischen Funktionen 1 ausgewählte Gruppe von NEW Aktionen ausführen können, erhalten min und max S_NO 2 wählen Leitung von 2 Zeilen 3 Wählen Sie zwischen 2 sno (min und max)

with t as (
select 1 sno, 'New' action from dual union 
select 2,'Dependent' from dual union 
select 3,'Dependent' from dual union 
select 4,'Dependent' from dual union 
select 5,'New' from dual union 
select 6,'Dependent' from dual union 
select 7,'Dependent' from dual union 
select 8,'New' from dual union 
select 9,'Dependent' from dual union 
select 10,'Dependent' from dual 
) 
select * 
    from (select * 
      from (select sno, lead(sno) over (order by sno) a 
        from (select row_number() over (partition by action order by Sno) t, 
           t.sno 
          from t 
          where t.action = 'New' 
         ) a 
       where t <=2) 
     where a is not null) a, t 
where t.sno >= a.sno and t.sno < a.a 
Verwandte Themen