【问题标题】:How to do a STDEV calculation with the LAG function?如何使用 LAG 函数进行 STDEV 计算?
【发布时间】:2019-12-11 01:11:56
【问题描述】:

我正在运行这样的代码:

SELECT ID, Date, Price,
    STDEV(Price) OVER (ORDER BY ID, Date ROWS BETWEEN 30 PRECEDING AND CURRENT ROW) As OneMonths,
    STDEV(Price) OVER (ORDER BY ID, Date ROWS BETWEEN 60 PRECEDING AND CURRENT ROW) As TwoMonths,
    STDEV(Price) OVER (ORDER BY ID, Date ROWS BETWEEN 90 PRECEDING AND CURRENT ROW) As ThreeMonths
FROM Price_Table

这给了我这个结果。

在第 5 行中,对于三个方差,我总是有三个空值。这是有道理的。但是,每次 ID 更改时,我都必须获得前一个 ID 的价格,因为每次 ID 更改时,我都希望标准偏差会被重置。所以,橙色​​的第一行应该是空的,我认为,下一行应该是零,因为第二天价格没有变化。我尝试将 LAG 函数包装在 STDEV 函数周围,但出现错误。我反其道而行之,也报错。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    如果你想要 per id 的值,那么你需要partition by:

    SELECT ID, Date, Price,
           STDEV(Price) OVER (PARTITION BY ID ORDER BY Date ROWS BETWEEN 30 PRECEDING AND CURRENT ROW) As OneMonths,
           STDEV(Price) OVER (PARTITION BY ID ORDER BY Date ROWS BETWEEN 60 PRECEDING AND CURRENT ROW) As TwoMonths,
           STDEV(Price) OVER (PARTITION BY ID ORDER BY Date ROWS BETWEEN 90 PRECEDING AND CURRENT ROW) As ThreeMonths
    FROM Price_Table;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多