使用 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 查询计算特定的移动平均线的主要内容,如果未能解决你的问题,请参考以下文章

在SQL中按组计算移动平均数

SQL - 计算可变长度的可变移动平均值

计算移动平均线

大查询移动平均线

计算移动平均线 MySQL?

移动平均线计算不正确