sql >> Databasteknik >  >> RDS >> PostgreSQL

Öka kolumnvärdet på vissa villkor i SQL-fråga på Postgresql

Använd lag() och kumulativ summa:

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

Obs:Detta kommer att starta om räkningen för varje djur -- vilket verkar vara den faktiska avsikten med vad du vill göra. Definitionen av problemet är lite knepigt om du vill att grupperna ska separeras efter djur, men att de ska vara inkrementella. En metod är:

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:Fråga 10 gånger långsammare i en annan klient

  2. Vilken är en lämplig datatyp för att lagra en tidszon?

  3. SQLSTATE[42000]:Syntaxfel eller åtkomstöverträdelse:1064

  4. Kan inte se triggers som jag skapade i SQL Server Management Studio 2008