Esta es una forma de problema de lagunas e islas. Puede asignar cada 0
un grupo contando el número de valores distintos de cero antes de él. Luego agregue.
Sin embargo, las tablas SQL representan desordenadas conjuntos No hay orden a menos que una columna especifique el orden. Déjame suponer que tienes uno. Entonces:
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;