如何算不上。两个ACTIVE条目之间的HOLD条目

时间:2014-02-24 05:19:08

标签: sql oracle

我想计算两个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。

1 个答案:

答案 0 :(得分:3)

您可以使用LEAD函数查看下一行的状态。然后计算当前行处于活动状态而下一个处于保持状态的事件。 从中减去1,你得到了你的输出。

SQL Fiddle

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 |