【问题标题】:calculate Exponential Moving average using sql使用 sql 计算指数移动平均线
【发布时间】:2023-04-07 11:05:01
【问题描述】:
month   prices
10  $25.15
11  $41.53
12  $72.19
13  $33.16
14  $33.95
15  $43.87

我必须使用 sql 中的上述数据计算指数移动平均线。我不知道该怎么做。 TIA

PS: EMA(n)   =  EMA(n−1) + ( ( 2 / ( n + 1 ) ) × ( P(n) − EMA(n−1) ) )

上面是我们可以取n = 6的公式;

【问题讨论】:

  • 预期结果是什么,您使用的是哪个RDBMS
  • @MotoGP 我正在使用 oracle

标签: sql


【解决方案1】:

您的任务中最有问题的部分是在纯 SQL 中计算聚合 Product(仅供参考:有许多标准聚合函数,如 Sum()、Min()、Max() 等,但没有 Product P( ))。一种可能的解决方案在:Aggregate Product function extends SQL (http://www.codeproject.com/Tips/137564/Aggregate-Product-function-extends-SQL) 基于数学方程:

N           N
P(Xi)= Exp(SUM(Log(Xi)))
i=1         i=1

翻译成如下SQL语句:

SELECT Exp(Sum(IIf([Num]=0,0,Log([Num]))))*IIf(Min([Num])=0,0,1) AS P
FROM Table1

您可以将此解决方案应用于您的问题。为了计算运行(移动)avg,您可以构建数据表的自连接并对当前之前的所有行应用计算。实际实现将取决于您使用的特定数据库。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 2020-05-18
    • 2012-09-15
    • 1970-01-01
    • 2014-12-24
    • 2023-01-30
    • 2010-10-04
    相关资源
    最近更新 更多