これは、ギャップと島の問題の一形態です。各0
を割り当てることができます その前のゼロ以外の値の数を数えることによるグループ。次に集計します。
ただし、SQLテーブルは順序付けされていないを表します セット。列で順序を指定しない限り、順序はありません。あなたが持っていると仮定させてください。次に:
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;