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

Zvyšte hodnotu sloupce za určitých podmínek v dotazu SQL na Postgresql

Použijte lag() a kumulativní součet:

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

Poznámka:Tím se restartuje počítání pro každé zvíře - což se zdá být skutečným záměrem toho, co chcete udělat. Definice problému je trochu složitější, pokud chcete, aby skupiny byly odděleny podle zvířat, ale aby byly přírůstkové. Jedna metoda je:

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. PostgreSQL:AKTUALIZACE pomocí agregační funkce

  2. Problém s přidáním dvou sloupců mysql a vrácením celkem

  3. Jak změnit symbol měny relace v Oracle

  4. řazení Oracle SQL