Esta é uma forma de problema de lacunas e ilhas. Você pode atribuir cada
0
um grupo contando o número de valores diferentes de zero antes dele. Em seguida, agregue. No entanto, as tabelas SQL representam não ordenadas conjuntos. Não há ordenação, a menos que uma coluna especifique a ordenação. Deixe-me supor que você tem um. Então:
select count(*)
from (select t.*,
sum(values <> 0) over (partition by idnumber order by <ordering col>) as grp
from t
) t
where values = 0
group by idnumber, grp;