Il s'agit d'une forme de problème de lacunes et d'îlots. Vous pouvez attribuer à chaque 0
un groupe en comptant le nombre de valeurs non nulles qui le précèdent. Ensuite, agrégez.
Cependant, les tables SQL représentent non ordonnées ensembles. Il n'y a pas de classement sauf si une colonne spécifie le classement. Laissez-moi supposer que vous en avez un. Ensuite :
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;