我有一个涉及Postgresql数据库的任务。我对 SQL 不太有经验。
我有一张贸易产品每周营业额的表格。
每周提供以下信息:产品、周数、周营业额(可能是正值或负值,具体取决于天气,更多产品被购买或出售)。我添加了一栏,其中包含每周的期末余额。我的表中有第一周所有产品的期末余额 (week_number = 0),但所有其他周的余额均为“空”。下面提供了一些示例性记录。
product | week_number | turnover | closing_balace
--------------------------------+-------------+----------+----------------
BLGWK-05.00*1250*KR-S235JRN0-A | 0 | 50.00 | 1240.00
BLGWK-05.00*1250*KR-S355J2CN-K | 0 | 45.70 | 455.75
BLGWK-05.00*1464*KR-DD11NIET-K | 0 | 30.01 | 300.00
BLGWK-05.00*1500*KR-DD11NIET-R | 1 | 10.22 |
BLGWK-05.00*1500*KR-S235J2CU-K | 1 | 88.00 |
我需要一个查询来通过以下计算填充所有“空”的 opening_balance:
closing_balance = closing_balance of the same product for previous week + turnover for the week.
我尝试了这个查询:
update table_turnover
set closing_balance = (select lag(closing_balance, 1) over (partition by product order by week_number) + turnover)
where week_number > 0;
它从未起作用 - “第 0 周”以上的 close_balance 的“null”值仍然为“null”。
我也尝试过:
update table_turnover
set closing_balance = (select
case when week_number = 0
then closing_balance
else (lag(closing_balance, 1) over (partition by product order by week_number) + turnover)
end
from table_turnover)
这会产生一个错误
子查询返回多条记录用作表达式
知道如何进行此计算吗?
先感谢您。