需要获取oracle表中第1次出现和第2次出现之间的记录数

时间:2017-09-22 09:22:41

标签: mysql oracle

让我们参考下面的例子。

我正在使用' 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

请你帮忙。

1 个答案:

答案 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