Check if this helps.
demo@ORA11G> set feedback off
demo@ORA11G> drop table t purge;
demo@ORA11G> create table t(bid int,dt date,due int);
demo@ORA11G> insert into t values(1, to_date('01-jan-2016','dd-mon-yyyy'),1);
demo@ORA11G> insert into t values(1, to_date('01-feb-2016','dd-mon-yyyy'),2);
demo@ORA11G> insert into t values(1, to_date('01-mar-2016','dd-mon-yyyy'),0);
demo@ORA11G> insert into t values(1, to_date('01-apr-2016','dd-mon-yyyy'),2);
demo@ORA11G> insert into t values(1, to_date('01-may-2016','dd-mon-yyyy'),4);
demo@ORA11G> insert into t values(1, to_date('01-jun-2016','dd-mon-yyyy'),5);
demo@ORA11G> insert into t values(1, to_date('01-jul-2016','dd-mon-yyyy'),6);
demo@ORA11G> insert into t values(1, to_date('01-aug-2016','dd-mon-yyyy'),0);
demo@ORA11G> insert into t values(1, to_date('01-sep-2016','dd-mon-yyyy'),3);
demo@ORA11G> insert into t values(2, to_date('01-jan-2016','dd-mon-yyyy'),1);
demo@ORA11G> insert into t values(2, to_date('01-feb-2016','dd-mon-yyyy'),0);
demo@ORA11G> insert into t values(2, to_date('01-mar-2016','dd-mon-yyyy'),1);
demo@ORA11G> insert into t values(2, to_date('01-apr-2016','dd-mon-yyyy'),0);
demo@ORA11G> insert into t values(2, to_date('01-may-2016','dd-mon-yyyy'),1);
demo@ORA11G> insert into t values(2, to_date('01-jun-2016','dd-mon-yyyy'),0);
demo@ORA11G> commit;
demo@ORA11G> set feedback on
demo@ORA11G>
demo@ORA11G>
demo@ORA11G> select bid, cnt
2 from (
3 select bid, grp,count(*) cnt,
4 dense_rank() over(partition by bid order by count(*) desc) rnk
5 from (
6 select bid,dt,due,last_value(x ignore nulls) over(partition by bid order by dt) grp
7 from (
8 select t.*,
9 case when lag(due) over(partition by bid order by dt) is null or
10 lag(due) over(partition by bid order by dt) = 0 then
11 row_number() over(partition by bid order by dt) end x
12 from t
13 )
14 where due <> 0
15 )
16 group by bid,grp
17 )
18 where rnk = 1 ;
BID CNT
---------- ----------
1 4
2 1
2 1
2 1
4 rows selected.
demo@ORA11G>