PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Преброяване на промените в колоната до конкретна стойност в postgres

Използвайте lag за да получите стойността на предишния ред и да преброите след това въз основа на условията.

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)

Или може да се опрости като

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изброите всички изгледи в PostgreSQL база данни

  2. Защо резултатът от COUNT се удвоява, когато се присъединя към две?

  3. SQL транспониране на редове като колони

  4. Изберете само днешните (от полунощ) времеви марки

  5. SqlAlchemy(Flask+Postgres) :Как да актуализирам само конкретен атрибут на json поле?