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
值,因此如果您有多个pair
s 那么您DIFF
可能不正确。CTE
CTE
用一个GROUP BY
on查询pair
ORDER BY
规范来确定TOP
排序如果需要,您可以在 a 中添加日期过滤器WHERE
到外部SELECT
。
归档时间: |
|
查看次数: |
1798 次 |
最近记录: |