Postgresql postgres cumsum乘法和更新价格

Postgresql postgres cumsum乘法和更新价格,postgresql,Postgresql,在链接和下面的Postgres 13 SQL语句中,字段计算不正确\u计算值\u b计算不正确 select date_actual,transaction_date, new_price_date,item_name, quantity, SUM((SELECT quantity as B_alloc WHERE item_name='B')) OVER (

在链接和下面的Postgres 13 SQL语句中,字段
计算不正确\u计算值\u b
计算不正确

    select date_actual,transaction_date, new_price_date,item_name, quantity, 
                          SUM((SELECT quantity as B_alloc
                           WHERE item_name='B')) OVER (
                              ORDER by date.date_actual 
                              RANGE BETWEEN unbounded PRECEDING AND CURRENT ROW
                          ) as CUM_inv_B,
                          price_B, right_cum_value_B,
                          SUM((SELECT (quantity*price_date.price_B) as B_value
                           WHERE item_name='B')) OVER (
                              ORDER by date.date_actual 
                              RANGE BETWEEN unbounded PRECEDING AND CURRENT ROW
                          ) as incorrectly_calc_value_B
             FROM date 
             LEFT JOIN item_ ON item_.transaction_date=date.date_actual
             FULL JOIN price_date ON price_date.new_price_date=date.date_actual
             ORDER BY date.date_actual DESC
除计算值不正确外,所有字段中的数据均正确

我尝试了
SUM(cum_inv_B*price_B)
进行计算,但没有成功

ERROR:  column "cum_inv_b" does not exist
LINE 8:    SUM((SELECT (CUM_inv_B*pric...
右累积值\u B
是手动输入的,希望知道如何更正我下面的陈述

要获取当前的错误值,请执行以下操作:

SUM((SELECT (quantity*price_date.price_B) as B_value
                              WHERE item_name='B')) OVER (
                                 ORDER by date.date_actual 
                                 RANGE BETWEEN unbounded PRECEDING AND CURRENT ROW
                             ) as incorrectly_calc_value_B
  • 我的第二个问题,由于价格B在某些日期为空(这是正确的),我如何每天更正结转,直到价格B发生变化?例如,2021年4月5日,价格变更为79。在04-06和04-07,价格必须都为79,而不是null。08年4月的价格_B正确,为80,因为它从79变为80

  • 请发布预期输出..我无法解决您的主要问题。需要测试数据和预期结果。但对于空值,我想到了两个选择:添加一个where条件“和price_date.price_B不为空”或选择(price_date.price_B,0)。这同样适用于数量,无论它来自何方。谁知道解决这个问题可能只会解决另一个问题。预期结果在我的解释中并不清楚。它在DB小提琴中作为问题1的“right_cum_value_b”列。我将尝试合并。