sql >> Databáze >  >> RDS >> PostgreSQL

Počítejte, kde se sloupec změní na konkrétní hodnotu v postgresu

Použijte lag získat hodnotu na předchozím řádku a následně počítat na základě podmínek.

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)

Nebo to lze zjednodušit jako

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. MySQL:Optimální index pro mezi dotazy

  2. Django dotaz s order_by, different a limit na Postgresql

  3. sql geografie do dbgeografie?

  4. Dotaz tří spojených tabulek se vztahem many-to-many v JPA