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 解决方案: |
|
|
|
|
|