我正在使用Postgres。我无法使用正在运行的总数“ Cum_sum”来更新表。
在“ cum_sum”列中,我想用永久列“ Cum_sum”更新表。 “ Cum_sum”是金额的运行总计。
select语句是有效的语句,但是由于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"
答案 0 :(得分:1)
我将在此处使用data-modifying 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要求提供主键列的原因,因为我们需要确保正确关联更新值。