让我们参考下面的例子。
我正在使用' emp'具有以下值的表格,
Rownumber Values
1 C21
2 abc\
3 C25
4 C23
5 efg
6 C21
7 abc
8 C25
9 C21
10 ABC
I need the record count between the 1st and 2nd occurrence of C21.
(i.e.,)
Count b/n 1st and 2nd occurrence of 'C21' is = 4
1 C21
2 abc\
3 C25
4 C23
5 efg
6 C21
Count b/n 2nd and 3rd Occurence of 'C21' is = 2
6 C21
7 abc
8 C25
9 C21
请你帮忙。
答案 0 :(得分:2)
使用函数row_number()
和lag()
:
select val, rn, rn - lag(rn) over (order by rn) - 1 distance
from ( select row_number() over (order by rnr) rn , rnr, val from emp )
where val = 'C21'
测试数据:
create table emp(rnr number(3), val varchar2(5));
insert into emp values ( 1, 'C21');
insert into emp values ( 2, 'abc\');
insert into emp values ( 3, 'C25');
insert into emp values ( 4, 'C23');
insert into emp values ( 5, 'efg');
insert into emp values ( 6, 'C21');
insert into emp values ( 7, 'abc');
insert into emp values ( 8, 'C25');
insert into emp values ( 9, 'C21');
insert into emp values (10, 'ABC');
结果:
VAL RN DISTANCE
----- ---------- ----------
C21 1
C21 6 4
C21 9 2