sql >> Database >  >> RDS >> PostgreSQL

Verhoog kolomwaarde onder bepaalde voorwaarde in SQL-query op Postgresql

Gebruik lag() en cumulatieve som:

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

Opmerking:hierdoor wordt het aftellen voor elk dier opnieuw gestart -- wat de eigenlijke bedoeling lijkt te zijn van wat je wilt doen. De definitie van het probleem is een beetje lastig als je wilt dat de groepen gescheiden zijn per dier, maar incrementeel. Een methode is:

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. Hoe maak ik verbinding met de mysql-server met Go en go-sql-driver?

  2. MySQL ROUND-functie met half naar beneden afronden in plaats van half naar boven

  3. MySQL-databaseschema's vergelijken

  4. Hoe kan ik een datetime in SQL Server afkappen?