PostgreSQL обновляет значение до максимального значения + 1 - PullRequest
1 голос
/ 13 января 2012

Мне нужно обновить таблицу ниже, чтобы значение в столбце 3 было равно максимальному значению +1 (для каждого A, где B = 339)

            A  |        B    |   C  
         14430 |         339 |    -1     (value c should = 3)
         14430 |          80 |     0
         14430 |         262 |     1
         14430 |          39 |     2

         14431 |         339 |    -1     (value c should = 1)           
         14431 |          41 |     0

         14432 |         339 |    -1     (value c should = 0)   

         14433 |         284 |     0 
         14452 |         298 |     0
         14452 |         181 |     1

         14490 |         339 |    -1     (value c should = 0)   

         14491 |         339 |    -1     (value c should = 0) 

         14492 |         339 |    -1     (value c should = 0) 

1 Ответ

3 голосов
/ 13 января 2012
UPDATE tbl
SET    c = x.new_c
FROM (
    SELECT a, max(c) + 1 AS new_c
    FROM   tbl
    -- WHERE  b <> 339  -- exclude b = 339 from calculating the maximum?
    GROUP  BY a
    ) x
WHERE  tbl.b = 339
AND    tbl.a = x.a
AND    tbl.c IS DISTINCT FROM x.new_c  -- to avoid pointless updates
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...