【问题标题】:SQL - Recursive average based on preceding row (AR model)SQL - 基于前一行的递归平均值(AR 模型)
【发布时间】:2023-03-04 07:09:04
【问题描述】:

我想知道如何使用 While 或 Recursion 来创建 AR(1) 模型。 在我的数据库中,我在一个表中有以下变量(Y 是一个值):

Period Values
20171 Y_0
20172 Y_1
20173 Y_2
20174 Y_3
20181 Y_4

我正在尝试创建一个查询,该查询将创建一个新列 AR,其定义为:

Period Value AR
20171 Y_0 Y_0
20172 Y_1 AVG( AR_0 & Y_1)
20173 Y_2 AVG( AR_1 & Y_2)

例如: Image of desired dataflow from excel

我尝试了以下方法:

SELECT Period , Values, Values as AR,
INTO #Beginning
FROM table
WHERE Period = (SELECT MIN(PERIOD) FROM table)

SELECT Period , Values, Values as AR,
FROM #Beginning
UNION ALL
SELECT Period , Values, NULL as AR,
FROM table
WHERE Period >(SELECT MIN(PERIOD) FROM table)

这会产生一个表,其中第一行是所需结果。但是,我似乎无法获得 AR 列的其余部分,因为它们相互依赖。到目前为止,这些都是空的。

是否可以在 SQL 中使用递归创建一列,其中每一行依赖于同一行中的一列,以及前一行中的一列?

【问题讨论】:

    标签: sql recursion time-series recursive-query autoregressive-models


    【解决方案1】:

    您将使用窗口函数。例如:

    select period, value,
           avg(value) over (order by period rows between 1 preceding and current row)
    from t;
    

    【讨论】:

    • 这是否也包括值列?以便每个 AR 列具有前面的 AR 和当前值的平均值?非常感谢!
    • @Apeyko 。 . .我只是把它重命名为ar,因为我有点困惑。
    猜你喜欢
    • 2022-06-10
    • 1970-01-01
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 2023-03-18
    • 2020-05-27
    相关资源
    最近更新 更多