Bạn dường như muốn một cái gì đó giống như 1 hơn tổng tích lũy của các phần. Phương pháp đơn giản nhất là:
select t.*,
(case when part = 1 then 0 -- the easy case
else 1 + sum(part) over (order by id)
end) as number
from t;
Nếu part
có thể nhận các giá trị khác 0 và 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;