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

Tæl, hvor kolonnen ændres til specifik værdi i postgres

Brug lag for at få værdien på forrige række og tælle derefter baseret på betingelserne.

select count(*)
from (select action_date,action,lag(action) over(order by action_date) as prev_action
      from t
     ) t
where (action<>prev_action and action=1) or (action=1 and prev_action is null)

Eller det kan forenkles som

select 
count(case when lag(action) over(order by action_date) is null then and action = 1 then 1
           when lag(action) over(order by action_date) is not null and lag(action) over(order by action_date) <> action and action = 1 then 1 
      end) as cnt
from t



  1. forespørgselssluttrin meget langt på tilfældige tidspunkter

  2. MySQL-datatyper:Kend dem, der skal bruges, og hvordan

  3. Dvale-fejl under vedvarende TEXT-datatype

  4. Alternativ til lead lag-funktion i SQL Server 2008