【问题标题】:Calculate a specific moving average using sql query使用 sql 查询计算特定的移动平均线
【发布时间】:2023-03-22 16:20:02
【问题描述】:

假设我有一个包含一列“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 术语...

标签: sql pyspark-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 的数据库小提琴。

【讨论】:

    猜你喜欢
    • 2014-12-24
    • 2023-04-07
    • 2021-06-14
    • 2014-11-18
    • 1970-01-01
    相关资源
    最近更新 更多