gpt4 book ai didi

postgresql - postgresql 中的滞后计算

转载 作者:行者123 更新时间:2023-11-29 13:19:38 27 4
gpt4 key购买 nike

我有一个包含以下数据的表:计算列:当前

| id | Date (dd/mm/yyyy) | Factor | Actual | Current  |
|----|-------------------|--------|--------|----------|
| 1 | 04/01/2017 | 0.5 | 100 | 100 |
| 2 | 04/02/2017 | 0.5 | 120 | 100 |
| 3 | 04/03/2017 | 0.5 | 120 | 110 |
| 4 | 04/04/2017 | 0.5 | 115 | 115 |
| 5 | 04/05/2017 | 0.5 | 125 | 115 |
| 6 | 04/06/2017 | 0.5 | 100 | 120 |
| 7 | 04/07/2017 | 0.5 | 100 | 110 |

当前行 = 上一行当前值 + 因子 *(上一行实际值 - 上一行当前值)

    For id = 1, current = same as actual = 100
For id = 2, current = 100 + 0.5 * (100 - 100) = 100
For id = 3, current = 100 + 0.5 * (120 - 100) = 110
For id = 4, current = 110 + 0.5 * (120 - 110) = 115
and so on...

如何在postgresql中实现使用查询?

最佳答案

你需要一个递归查询。

with recursive my_table_with_rn as 
(
select *, row_number() over (order by id) as rn
from my_table
),

rec_query(rn, id, date, factor, actual, current) as
(
select rn, id, date, factor, actual, actual
from my_table_with_rn
where rn = 1

union all

select
t.rn, t.id, t.date, t.factor, t.actual,
p.current + t.factor * (p.actual - p.current)
from rec_query p
join my_table_with_rn t on t.rn = p.rn + 1
)

select id, date, factor, actual, current
from rec_query
order by id;

请注意,添加了 row_number() 以在 ids 不连续的情况下工作(实际数据不需要,您可以使用 id 而不是 rn)。

Test it here.

关于postgresql - postgresql 中的滞后计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44282410/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com