我在 MS SQL 中有 2 列,其中一列是序列号。另一个是值(value)观。我需要第三列,它给出该行和接下来的 2 行中的值的总和。
例如
SNo values
1 2
2 3
3 1
4 2
5 6
7 9
8 3
9 2
所以我需要第三列,其总和为 2+3+1、3+1+2 等等,因此第 8 行和第 9 行不会有任何值:
1 2 6
2 3 6
3 1 4
4 2 5
5 1 6
7 2 7
8 3
9 2
该解决方案可以是通用的,以便我可以改变当前窗口大小,将 3 个数字相加到一个更大的数字(例如 60)。
最佳答案
这是SQL Fiddle演示了以下查询:
WITH TempS as
(
SELECT s.SNo, s.value,
ROW_NUMBER() OVER (ORDER BY s.SNo) AS RowNumber
FROM MyTable AS s
)
SELECT m.SNo, m.value,
(
SELECT SUM(s.value)
FROM TempS AS s
WHERE RowNumber >= m.RowNumber
AND RowNumber <= m.RowNumber + 2
) AS Sum3InRow
FROM TempS AS m
在您的问题中,您要求对 3 个连续值求和。您修改了问题,表示需要求和的连续记录数可能会发生变化。在上面的查询中,您只需将 m.RowNumber + 2
更改为您需要的值。
因此,如果您需要 60,则使用
m.RowNumber + 59
如您所见,它非常灵活,因为您只需更改一个数字。
关于sql - 移动平均线/滚动平均线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20408060/