PostgreSQL使用``ag()''窗口函数更新查询
技术问答
225 人阅读
|
0 人回复
|
2023-09-12
|
我有一个参与Postgresql数据库的任务。我是对的SQL经验不多。0 g q/ t Z: d$ S
我有一张每周贸易产品营业额的桌子。
' x4 O5 L* h6 K, q! [0 k1 b对于每周,提供以下信息:产品、周数、周营业额(可能是正数或负数,取决于天气是购买还是销售更多产品)。我已经加了一个列,每周都有期末余额。我在表中第一周所有产品的期末余额(week_number+ Q. n' x& W. J1 V
= 0),所有其他周都是 null以下是一些示例记录。
% q! G/ D: C5 F4 e) V0 |8 A3 P- u product | week_number | turnover | closing_balace-------------------------------- ------------- ---------- ---------------- BLGWK-05.00*1250*KR-S235JRN0-A | | 50.00 | 1240.00 BLGWK-05.00*1250*KR-S355J2CN-K | | 45.70 | 455.75 BLGWK-05.00*1464*KR-DD11NIET-K | | 30.01 | 300.00 BLGWK-05.00*1500*KR-DD11NIET-R | | 10.22 | BLGWK-05.00*1500*KR-S235J2CU-K | | 88.00 |我需要一个查询所有空的 ,我需要一个查询closeing_balance”:
$ S' \# T% P4 W9 Iclosing_balance = closing_balance of the same product for previous week turnover for the week.我试过这个查询:
& x0 c( S5 @1 `) |; a$ yupdate table_turnover set closing_balance = (select lag(closing_balance,1) over (partition by product order by week_number) turnover) where week_number > 0;它从未成功过-高于“第0周”的“ closed_balance空值仍然是空。
/ W# I6 \. h6 \1 i' w5 d我也试过:9 O# J* _/ y: b/ U- ^. r
update table_turnover set closing_balance = (select case when week_number = then closing_balance else (lag(closing_balance,1) over (partition by product order by week_number) turnover) end from table_turnover)这导致了一个错误
, Y' n+ ]6 E* w- v( {! x `子查询返回的多个记录用作表达式! o: n% H8 @2 b* ^5 Y# H& \" L
你知道如何计算这个吗?! r0 I! O% _9 [
先感谢您。
' U) Z! i3 b1 z1 M, H * F: a. o" m* x, P9 W; b( Z$ O
解决方案: |
|
|
|
|
|