postgresql 使用前一行值更新PostegreSQL

3qpi33ja  于 9个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(105)

我尝试用以前股票的价值更新我的基本SellAll。到目前为止,我有这样的请求:

UPDATE SellAll 
set S_stock = (S_in - S_out) + monthn1.stock
FROM  
(
    SELECT  
        LAG(S_stock,1,0) OVER (ORDER BY S_famille,S_year, S_month) AS stock, 
        S_id
    FROM SellAll
) AS monthn1
WHERE SellAll.S_id = monthn1.S_id;

字符串
但是我没有得到想要的结果。
| ID|年|月|famille|股票|在|出来|
| --|--|--|--|--|--|--|
| 573 | 2023 | 9 | 2 |-6个| 20 | 18 |
| 574 | 2023 | 10 | 2 | 1 | 18 | 21 |
| 575 | 2023 | 11 | 2 |-7个| 21 | 20 |
| 576 | 2023 | 12 | 2 | 2 | 25 | 20 |
根据我的要求,
| ID|年|月|famille|股票|在|出来|
| --|--|--|--|--|--|--|
| 573 | 2023 | 9 | 2 |-6个| 20 | 18 |
| 574 | 2023 | 10 | 2 | 0 | 18 | 21 |
| 575 | 2023 | 11 | 2 | 2 | 21 | 20 |
| 576 | 2023 | 12 | 2 |-2个| 25 | 20 |
但我想要这个:
| ID|年|月|famille|股票|在|出来|
| --|--|--|--|--|--|--|
| 573 | 2023 | 9 | 2 |-6个| 20 | 18 |
| 574 | 2023 | 10 | 2 |-3个| 18 | 21 |
| 575 | 2023 | 11 | 2 |-2个| 21 | 20 |
| 576 | 2023 | 12 | 2 | 3 | 25 | 20 |
我想减去(入-出)+前一行的库存量,你能帮我吗?
我想减去(in - out)+PostgreSQL中前一行的股票

xuo3flqw

xuo3flqw1#

第一,股票的价值是正确的

SELECT  
  *,
  LAG(S_stock,1,0) OVER (ORDER BY S_famille,S_year, S_month) AS stock
FROM SellAll

字符串
这似乎不正确,但
这样看起来更好:

SELECT  
  *,
  LAG((S_in - S_out) +S_stock,1,0) OVER (ORDER BY S_famille,S_year, S_month) AS stock
FROM SellAll


测试它:

UPDATE SellAll set S_stock =  monthn1.stock
FROM  
(
    SELECT  LAG((S_in - S_out) +S_stock,1,0) OVER (ORDER BY S_famille,S_year, S_month) AS stock, 
            S_id
    FROM SellAll
) AS monthn1
WHERE SellAll.S_id = monthn1.S_id and monthn1.stock<>0;


产出:
| s_id| s年|s_month| s_famille| S股|s_in| s_out|
| --|--|--|--|--|--|--|
| 573 | 2023 | 9 | 2 |-6个| 20 | 18 |
| 574 | 2023 | 10 | 2 |-4个| 18 | 21 |
| 575 | 2023 | 11 | 2 |-2个| 21 | 20 |
| 576 | 2023 | 12 | 2 |-6个| 25 | 20 |
P.S.这些都不是你想要的价值,但似乎正确的/我..
参见:DBFIDDLE

相关问题