Как мне обновить таблицу postgres с промежуточным итогом суммы - PullRequest
0 голосов
/ 23 мая 2019

Я использую Postgres.Я не могу обновить таблицу с промежуточным итогом: "Cum_sum".

В столбце «cum_sum» я хочу обновить таблицу постоянным столбцом «Cum_sum»."Cum_sum" - это текущая сумма.

Оператор выбора является допустимым оператором, но я не могу обновить таблицу, потому что UPDATE не работает с оконными функциями.

Пожалуйста, помогите.

SELECT cs3."Date",cs3."Amount",(sum("Amount") over (order by "Date")) as "Cum_sum" from cs3


cs3 Table
Date             Amount          Cum_sum
"2016-04-26"    "10.00000"  "10.00000"
"2016-06-01"    "-10.00000" "0.00000"
"2018-01-23"    "2150.57000"    "2150.57000"
"2018-01-30"    "-2150.57000"   "0.00000"

1 Ответ

1 голос
/ 24 мая 2019

Я бы использовал изменяющий данные CTE здесь (при условии добавления нового столбца Balance):

WITH balance (id, value) AS (
    SELECT id, (sum("Amount") over (order by "Date", id)) FROM cs3
)
UPDATE cs3 SET "Balance" = balance.value FROM balance WHERE cs3.id = balance.id;

Онлайн-пример: https://dbfiddle.uk/?rdbms=postgres_11&fiddle=318929ea3bd4d029070558fe9b47f2a3

Именно поэтому @Jeremy запросил столбец первичного ключа, так как мы должны убедиться, что мы корректно коррелируем значения обновлений.

...