2017-03-13 1 views
0

Ich brauche eine Anzahl von Zeilen, wo Aktion = 1 und Aktion unterscheidet sich von der obigen Zeile. Die erste Zeile sollte zählen, wenn Aktion = 1 ist.Zählen, wo die Spalte zu einem bestimmten Wert in Postgres ändert

 action_date  | action 
---------------------+-------- 
2017-01-01 00:00:00 |  1 
2017-01-02 00:00:00 |  1 
2017-01-03 00:00:00 |  0 
2017-01-04 00:00:00 |  0 
2017-01-05 00:00:00 |  1 
2017-01-06 00:00:00 |  0 
2017-01-07 00:00:00 |  1 

In diesem Beispiel werden die 1., 5. und 7. Reihen zählen und das Ergebnis 3. Jede Hilfe sehr geschätzt wird viel sein sollte.

Antwort

2

Verwenden Sie lag, um den Wert für die vorherige Zeile abzurufen 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

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 
+0

für die schnelle Antwort Vielen Dank vereinfacht werden. Die Antwort beinhaltet nicht die erste Zeile zählen. Wie kann das enthalten sein? – rurp

+0

sehen Sie die bearbeitete Antwort. –

+0

Das funktioniert perfekt. Vielen Dank! – rurp

Verwandte Themen