PostgreSQL使用``ag()''窗口函数更新查询
技术问答
302 人阅读
|
0 人回复
|
2023-09-12
|
我有一个参与Postgresql数据库的任务。我是对的SQL经验不多。
0 H, h |/ c+ h6 {我有一张每周贸易产品营业额的桌子。
. Z1 r, F, T2 Q1 s/ q+ H对于每周,提供以下信息:产品、周数、周营业额(可能是正数或负数,取决于天气是购买还是销售更多产品)。我已经加了一个列,每周都有期末余额。我在表中第一周所有产品的期末余额(week_number% d; @& E+ I5 Z9 \4 d9 H8 J! {
= 0),所有其他周都是 null以下是一些示例记录。
/ }& [* u: ^' P2 G. Q) e2 D4 G" W6 L P 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”:/ i4 [- @" n7 Y" Q+ y& }
closing_balance = closing_balance of the same product for previous week turnover for the week.我试过这个查询:
2 p0 u+ A& U1 L, hupdate 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空值仍然是空。
+ h3 ~9 g4 V: h; W. T9 G+ ?6 A我也试过:6 R, @ z3 Y( D0 C3 c) ^
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)这导致了一个错误
0 V4 h s8 ~8 z) [. H子查询返回的多个记录用作表达式+ F1 d( m9 O% w' p. S& n1 _
你知道如何计算这个吗?
* Q* F8 Z% B7 Z( Y7 K N+ Q先感谢您。
! O( q% x M J( G n3 @' S " u) m, ]( K; ^4 Z! u, y& J
解决方案: |
|
|
|
|
|