PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Compter où la colonne change en valeur spécifique dans postgres

Utiliser lag pour obtenir la valeur sur la ligne précédente et compter par la suite en fonction des conditions.

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)

Ou il peut être simplifié comme

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