create column table TAB(ID int, DATE TIMESTAMP, VAL int);
insert into tab values(1,'2014-09-14 14:22:00',1);
insert into tab values(1,'2014-09-14 14:25:00',1);
insert into tab values(2,'2014-09-14 13:22:00',0);
insert into tab values(1,'2014-09-14 15:02:00',0);
insert into tab values(1,'2014-09-14 14:37:00',0);
insert into tab values(2,'2014-09-14 14:25:00',1);
insert into tab values(2,'2014-09-14 14:32:00',1);
insert into tab values(1,'2014-09-14 14:05:00',1);
insert into tab values(2,'2014-09-14 14:45:00',0);
insert into tab values(2,'2014-09-14 14:59:00',0);
insert into tab values(1,'2014-09-14 15:12:00',1);
insert into tab values(1,'2014-09-14 15:18:00',1);
insert into tab values(1,'2014-09-14 15:21:00',1);
select ID,DATE,VAL,row_number() over (partition by ID,GROUPID order by DATE) as CUMULATIVE_SUM from (
select *,(row_number() over (partition by id order by date)-row_number() over (partition by id,val order by date)) as GROUPID
from TAB
)
where VAL = 1
union all select ID,DATE,VAL,VAL as CUMULATIVE_SUM from TAB where VAL = 0
order by ID,DATE