使用 sql 查询计算特定的移动平均线
Posted
技术标签:
【中文标题】使用 sql 查询计算特定的移动平均线【英文标题】:Calculate a specific moving average using sql query 【发布时间】:2019-11-01 18:54:24 【问题描述】:假设我有一个包含一列“A”的表,我想创建另一列名为“B”的列
B[i] = 0.2*A[i] + 0.8*B[i-1]
B[0]=0
.
我的问题是我不能使用 OVER()
函数,因为我想在尝试构造 B 时使用 B 中的值。任何想法都将不胜感激。谢谢
【问题讨论】:
您能否提供一个包含数据和预期结果的示例? 感谢您的考虑。设“A”为 [1, 2, 3, 0]:B[0] = 0.2*1 + 0.8*0 = 0.2, B[1] = 0.2*2 + 0.8*0.2 = 2, B[2] = 0.2*3 + 0.8*2 = 2.2,B[3] = 0.2*0 + 0.8*2.2 = 1.76 我不太理解 SQL 术语... 【参考方案1】:这是一个相当复杂的数学练习。您希望从前几行累积呈指数递减的数量。
这有点令人困惑,因为每行输入的数量是 20%,但这只是公式中的一个因素。
无论如何,这似乎是你想要的:
select t.*,
sum(power(0.8, -n) * a * 0.2) over (order by id) / power(0.8, -n)
from (select t.8,
row_number() over (order by id) - 1 as n
from t
) x;
Here 是一个使用 Postgres 的数据库小提琴。
【讨论】:
以上是关于使用 sql 查询计算特定的移动平均线的主要内容,如果未能解决你的问题,请参考以下文章