回答

收藏

PostgreSQL使用``ag()''窗口函数更新查询

技术问答 技术问答 303 人阅读 | 0 人回复 | 2023-09-12

我有一个参与Postgresql数据库的任务。我是对的SQL经验不多。
8 e$ _6 d" i+ {' E) s% Q我有一张每周贸易产品营业额的桌子。
6 ~6 a1 i( s( o对于每周,提供以下信息:产品、周数、周营业额(可能是正数或负数,取决于天气是购买还是销售更多产品)。我已经加了一个列,每周都有期末余额。我在表中第一周所有产品的期末余额(week_number0 C2 S( b0 C/ {$ @+ ~' U4 x
= 0),所有其他周都是 null以下是一些示例记录。! s5 |# \  |* 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”:7 m5 z' Q2 K9 q6 }& r9 ?& @
closing_balance = closing_balance of the same product for previous week   turnover for the week.我试过这个查询:2 M( l# \$ W. P3 Z
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周”的“ closed_balance空值仍然是空。
8 F% S4 y" E- ]( h" F我也试过:; S! h0 U( v) l
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)这导致了一个错误' {3 N0 d  g/ b6 `2 q, j1 T
子查询返回的多个记录用作表达式" B' D# j( u+ B
你知道如何计算这个吗?
9 S0 i" r* R  ?: u& ~  S- O1 d先感谢您。
. @3 S; E0 R& W, n  e: `                                                               
( z$ r' T6 {% a    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则