Dies ist eine Form des Lücken-und-Inseln-Problems. Sie können jedem 0
zuweisen eine Gruppe, indem die Anzahl der Nicht-Null-Werte davor gezählt wird. Dann aggregieren.
SQL-Tabellen sind jedoch ungeordnet setzt. Es gibt keine Reihenfolge, es sei denn, eine Spalte gibt die Reihenfolge an. Lassen Sie mich annehmen, dass Sie eine haben. Dann:
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;