PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Zählen Sie, wo sich die Spalte in Postgres auf einen bestimmten Wert ändert

Verwenden Sie lag um den Wert in der vorherigen Zeile zu erhalten und danach basierend auf den Bedingungen zu zählen.

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)

Oder es kann als

vereinfacht werden
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