Dit is een vorm van gaps-and-islands-probleem. U kunt elke 0
. toewijzen een groep door het aantal niet-nulwaarden ervoor te tellen. Verzamel dan.
SQL-tabellen vertegenwoordigen echter ongeordend stelt. Er is geen bestelling tenzij een kolom de volgorde aangeeft. Laat me aannemen dat je er een hebt. Dan:
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;