【问题标题】:How to use self-joining to calculate a historical rolling average如何使用自联接计算历史滚动平均值
【发布时间】:2016-04-04 00:28:26
【问题描述】:

我正在尝试利用自连接来计算 在代码列表中滚动每日 1 年平均值。下面的代码似乎提供了所有代码和日期的平均值,而不是提供会随每个代码和日期发生变化的唯一结果。 (换句话说,输出中的第三列一直是相同的,但每一行实际上应该是唯一的)。

这里有什么建议吗?谢谢

SELECT [Ticker], [Date],
(SELECT AVG(T.[Close])
FROM [intradayOHLC_Selected_Closing_Prices_Staging] AS T
JOIN [intradayOHLC_Selected_Closing_Prices_Staging] AS O2
ON T.[Ticker] = O2.[Ticker]
AND T.[Date] between O2.[Date 250 Days Ago] AND O2.[Date])
FROM [intradayOHLC_Selected_Closing_Prices_Staging] AS O2

【问题讨论】:

  • 你用的是什么数据库?
  • 非常感谢。这是完美的
  • 回答你的问题,这是 SQL Server 2012 和我自己的财务数据库。谢谢

标签: sql sql-server sql-server-2012 average self-join


【解决方案1】:

您在子查询中有一个额外的JOIN。这不是必需的。您只需要一个相关的子查询。

SELECT [Ticker], [Date],
       (SELECT AVG(T.[Close])
        FROM [intradayOHLC_Selected_Closing_Prices_Staging] AS T
        WHERE T.[Ticker] = O2.[Ticker] AND
              T.[Date] between O2.[Date 250 Days Ago] AND O2.[Date]
       ) as RollingAverage
FROM [intradayOHLC_Selected_Closing_Prices_Staging] AS O2;

【讨论】:

    猜你喜欢
    • 2021-08-01
    • 2013-05-07
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    相关资源
    最近更新 更多