PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come enumerare gruppi di partizioni nella mia tabella Postgres con le funzioni della finestra?

Sembra che tu voglia qualcosa come 1 in più rispetto alla somma cumulativa delle parti. Il metodo più semplice è:

select t.*,
       (case when part = 1 then 0  -- the easy case
             else 1 + sum(part) over (order by id)
        end) as number
from t;

Se part può assumere valori diversi da 0 e 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;