PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zwiększ wartość kolumny pod pewnymi warunkami w zapytaniu SQL na Postgresql

Użyj lag() i suma skumulowana:

with query as (
select w.*,
       sum(case when week < prev_week + 2 then 0 else 1 end) over (partition by animal order by week) as grp
from (select w.*,
             lag(week) over (partition by animal order by week) as prev_week
      from test.walk w
     ) w
)
select
    animal, week, grp,
    dense_rank() over (order by animal, grp) as grp2
from query

Uwaga:Spowoduje to ponowne rozpoczęcie odliczania dla każdego zwierzęcia – co wydaje się być faktyczną intencją tego, co chcesz zrobić. Definicja problemu jest nieco trudna, jeśli chcesz, aby grupy były oddzielone zwierzęciem, ale były przyrostowe. Jedna metoda to:

select w.*,
       sum(case when prev_week = week then 0 else 1 end) over (order by min_week, animal, week) as grp
from (select w.*,
             lag(week) over (partition by animal order by week) as prev_week,
             min(week) over (partition by animal) as min_week
      from test.walk w
     ) w;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podłańcuch PostgreSQL otrzymuje ciąg między nawiasami

  2. Jak obliczyć sumę wielu kolumn w PostgreSQL

  3. zakleszczenie postgresa bez jawnego blokowania

  4. Użyj czegoś takiego jak TOP z GROUP BY

  5. Jak dodać moduł do Wildfly za pomocą CLI