sql >> Database >  >> RDS >> PostgreSQL

Tel waar de kolom verandert in een specifieke waarde in postgre

Gebruik lag om de waarde op de vorige rij te krijgen en daarna te tellen op basis van de voorwaarden.

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)

Of het kan worden vereenvoudigd als

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. Geospatiale punttoewijzing in Vloeiend NHibernate

  2. Hoe u een controlebeperking op meerdere kolommen in SQL Server kunt maken - SQL Server / TSQL-zelfstudie, deel 84

  3. 3 manieren om de serversortering in MariaDB te krijgen

  4. Records selecteren die zijn gegroepeerd op uur van de dag, inclusief uren die geen records hebben