在特定日期/时间之间,当前字段和前一个字段之间差异的平均值

Han*_*del 0 sql-server-2008 sql-server

我正在尝试计算特定日期/时间之间当前字段和前一个字段之间差异的平均值。目前我有一个显示这个的查询,但我不确定我现在如何过滤它,以便我可以获得特定日期/时间之间“差异”列的平均值。(提前为我的 sql 技能或缺乏道歉。)

SELECT 
      S.Pair, 
      S.Date, 
      S.Time, 
      S.Bid, 
      S.Time, 
      ABS(S.Bid - T.Bid) as 'Diff'
FROM 
    dbo.Data as S
CROSS APPLY
           (
            SELECT TOP 1 T.Bid
            FROM
                dbo.Data as T
            WHERE
                 T.Id > S.Id
           ) as T
Run Code Online (Sandbox Code Playgroud)

任何指针将不胜感激。

编辑:

http://sqlfiddle.com/#!3/d4910/1

JNK*_*JNK 8

我使用了您的 SQL Fiddle 并在此处发布了一个有效的解决方案。

WITH Calc AS
(
    SELECT
        S.Pair,
        S.Date,
        S.Time,
        S.Bid,
        ABS(S.Bid - T.Bid) AS Diff
    FROM dbo.forexData AS S
    CROSS APPLY
    (
        SELECT TOP (1)
            T.Bid
        FROM dbo.forexData AS T
        WHERE
            T.Id > S.Id
            AND t.Pair = s.Pair
        ORDER BY
            T.Bid DESC
    ) AS T
)
SELECT
    Pair,
    AVG(DIFF)
FROM Calc
GROUP BY
    Pair;
Run Code Online (Sandbox Code Playgroud)

总结一下:

  • 我修复了您现有逻辑中的一个漏洞 - 目前您CROSS APPLY没有链接到相同的pair值,因此如果您有多个pairs 那么您DIFF可能不正确。
  • 我把固定的逻辑变成了 CTE
  • CTE用一个GROUP BYon查询pair
  • 我添加了一个ORDER BY规范来确定TOP排序

如果需要,您可以在 a 中添加日期过滤器WHERE到外部SELECT