PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Увеличете стойността на колоната при определено условие в SQL заявка на Postgresql

Използвайте lag() и кумулативна сума:

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

Забележка:Това ще рестартира броенето за всяко животно -- което изглежда е действителното намерение на това, което искате да направите. Дефиницията на проблема е малко трудна, ако искате групите да бъдат разделени по животно, но да бъдат нарастващи. Един метод е:

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. Някой имал ли е успех с използването на конкретен локал за база данни на PostgreSQL, така че сравнението на текст да не прави разлика между главни и малки букви?

  2. Съветни заключване или NOWAIT, за да избегнете чакането на заключени редове?

  3. Проблеми с командата postgresql COPY с Rails на различен сървър

  4. Насочва всички потребители в група с пол мъжки

  5. Как да вмъкна в таблица от друга таблица чрез съпоставяне на стойности?