gpt4 book ai didi

sql - PostgreSQL - 完成一个系列

转载 作者:行者123 更新时间:2023-11-29 12:40:33 25 4
gpt4 key购买 nike

我有一个系列,这是一个简单的公式,其中 x = 昨天,y = 三天前:

x + (x - y) / 2

在 excel 中,计算上述系列很容易。但这里有一个示例数据集,我想在其中根据以前的值完成一个系列。请注意,实际数据仅来自数据集。所以我们有 1/1/2018、1/2/2018 和 1/3/2018 的数据。然后我们想根据上面的公式预测 1/4/2018 到 1/8/2018:

      A (dt)    B (sum)   excel equivalent
row1 1/1/2018 1 (actual)
row2 1/2/2018 2 (actual)
row3 1/3/2018 5 (actual)
row4 1/4/2018 7 (predicted) =B3 + ((B3 - B1) / 2)
row5 1/5/2018 9.5 (predicted) =B4 + ((B4 - B2) / 2)
row6 1/6/2018 11.75 (predicted) =B5 + ((B5 - B3) / 2)
row7 1/7/2018 14.125 (predicted) =B6 + ((B6 - B4) / 2)
row8 1/8/2018 16.4375 (predicted) =B7 + ((B7 - B5) / 2)

我知道您可以通过使用 Partition By 获得累积和,但是我在修改累积和时遇到了问题,例如上面的。有没有办法在 PostgreSQL 中完成此操作?

这是excel的截图:

enter image description here

最佳答案

这是一个难题。这是使用递归 CTE 的解决方案:

with recursive cte as (
select 1 as n, 1::numeric as x, null::numeric as x_1, null::numeric as x_2
union all
select n + 1,
(case n + 1 when 2 then 2 when 3 then 5
else x + (x - x_2) / 2
end) as x,
x as x_1, x_1 as x_2
from cte
where n < 10
)
select *
from cte;

连同 db<>fiddle .

想法是将您需要的历史值放在单独的列中。请注意,公式是 x + (x - x_2)/2 而不是 x_1 + (x_1 - x_3)/2 因为这是使用 中的值上一行。

关于sql - PostgreSQL - 完成一个系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52703207/

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