使用前几行中的值更新 table,然后在下一次计算中使用输出值
Updating a table using values in previous rows and then using the outputted value in the next calculation
月份
价值
一个
b
六月
400
50
20
七月
空
25
10
八月
空
50
20
我想使用现有值预测未来月份。
我需要使用计算 400 + 50 - 20 更新 7 月的 NULL 值并获得值 430。
然后我需要在计算 (430 + 25 - 10) 中使用 7 月的值 430,这应该 return 8 月的值 445。
给定列 a 和 b 以及初始值,我如何使用 postgreSQL 为每个月填充这些值列?
如需查询,可使用:
select t.*,
( sum(value) over () +
sum(a + b) over (order by month) - (a + b)
) as imputed_value
from t;
注意:这假设 month
确实以某种保留日期的方式存储——例如该月的第一天。如果是字符串,可以使用:
select t.*,
( sum(value) over () +
sum(a + b) over (order by to_date(month, 'Mon')) - (a + b)
) as imputed_value
from t;
月份 | 价值 | 一个 | b |
---|---|---|---|
六月 | 400 | 50 | 20 |
七月 | 空 | 25 | 10 |
八月 | 空 | 50 | 20 |
我想使用现有值预测未来月份。
我需要使用计算 400 + 50 - 20 更新 7 月的 NULL 值并获得值 430。 然后我需要在计算 (430 + 25 - 10) 中使用 7 月的值 430,这应该 return 8 月的值 445。
给定列 a 和 b 以及初始值,我如何使用 postgreSQL 为每个月填充这些值列?
如需查询,可使用:
select t.*,
( sum(value) over () +
sum(a + b) over (order by month) - (a + b)
) as imputed_value
from t;
注意:这假设 month
确实以某种保留日期的方式存储——例如该月的第一天。如果是字符串,可以使用:
select t.*,
( sum(value) over () +
sum(a + b) over (order by to_date(month, 'Mon')) - (a + b)
) as imputed_value
from t;