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)
任何指针将不胜感激。
编辑:
我使用了您的 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可能不正确。CTECTE用一个GROUP BYon查询pairORDER BY规范来确定TOP排序如果需要,您可以在 a 中添加日期过滤器WHERE到外部SELECT。