我有一张名为'数量'如下
表1:
----------------------------------------------------
Price | A_Quantity | B_Quantity | Remaining_quantity
----------------------------------------------------
30 | 17 | 2 | 0
32 | 17 | 4 | 0
33 | 17 | 4 | 0
----------------------------------------------------
我希望字段 - Remaining_quantity
填写如下
表2:
----------------------------------------------------
Price | A_Quantity | B_Quantity | Remaining_quantity
----------------------------------------------------
30 | 17 | 2 | 15
32 | 17 | 4 | 11
33 | 17 | 4 | 7
----------------------------------------------------
我使用了以下查询,但它没有给出预期的结果。
update quantity set remaining_quantity = remaining_quantity -
(lag(B_Quantity) OVER (ORDER BY price))
答案 0 :(得分:0)
这是一种方法。
注意:通过查看数据,看起来没有特定的主键,但price
和a_quantity
的组合看起来很独特,因此我在join
中使用了这两列。如果这只是您的示例数据,并且实际上您有primary key
,我建议您将连接条件更改为primary key
。
update Table1
set remaining_quantity = upd_tbl.cum
from
(
select t.*
,a_quantity - sum(b_quantity) over (partition by a_quantity order by price) as cum
from table1 t
) upd_tbl
where table1.price=upd_tbl.price
and table1.a_quantity=upd_tbl.a_quantity;
说明:
sum(b_quantity) over (partition by a_quantity order by price)
将为您提供cumulative sum
分区(2,6,10 ..)。现在,您可以从a_quantity
中减去它以获得输出。