我想计算两个ACTIVE条目之间的HOLD条目数。
S.NO DATA STATUS
-----------------------------
1 B active
2 D hold
3 C active
4 H hold
5 j hold
6 k hold
7 l hold
8 y active
输出应为
COUNT OF HOLD
-------------
2
当HOLD条目介于两个ACTIVE条目之间时,我们将其作为一批HOLD条目。 然后我们计算表中的整批HOLD条目。在上面的例子中,两个活动之间有一个保持条目,这被计为1。 然后另外两个ACTIVE之间的另外4个HOLD条目,这被计为1。 所以有两个方面。 1 + 1。所以输出是2。
答案 0 :(得分:3)
您可以使用LEAD函数查看下一行的状态。然后计算当前行处于活动状态而下一个处于保持状态的事件。 从中减去1,你得到了你的输出。
Oracle 11g R2架构设置:
create table sam(
sno_ number,
data_ varchar2(5),
status_ varchar2(10)
);
insert into sam values(1,'a','hold');
insert into sam values(2,'b','active');
insert into sam values(3,'d','active');
insert into sam values(4,'s','hold');
insert into sam values(5,'c','active');
insert into sam values(6,'r','hold');
insert into sam values(7,'t','hold');
insert into sam values(8,'m','active');
insert into sam values(9,'y','hold');
<强>查询强>:
select count(1) - 1 count_of_hold
from (
select status_, lead(status_,1,'hold') over (order by sno_) next_status_
from sam
)
where status_ = 'active' and next_status_ = 'hold';
<强> Results 强>:
| COUNT_OF_HOLD |
|---------------|
| 2 |