パーツの累積合計よりも1多いものが必要なようです。最も簡単な方法は次のとおりです。
select t.*,
(case when part = 1 then 0 -- the easy case
else 1 + sum(part) over (order by id)
end) as number
from t;
part
の場合 0と1以外の値を取ることができます:
select t.*,
(case when part = 1 then 0 -- the easy case
else 1 + sum( (part = 1)::int ) over (order by id)
end) as number
from t;