Detta är en form av luckor-and-öar-problem. Du kan tilldela varje 0
en grupp genom att räkna antalet värden som inte är noll före den. Aggregera sedan.
SQL-tabeller representerar dock oordnade set. Det finns ingen beställning om inte en kolumn anger beställningen. Låt mig anta att du har en. Sedan:
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;