回答

收藏

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
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则