移动平均:连续计算最后 N 个数据的 AVERAGE
Moving average: Compute AVG with Last N data continuosly
我有一个 table 这样的:
Name Poin
================
ANA 5
ANA 10
ANA 3
ANA 8
ANA 7
ANA 5
我想像这样连续获取最后 2 行的 AVG:
Name Poin AVG 2
=========================
ANA 5 7.5
ANA 10 6.5
ANA 3 5.5
ANA 8 7.5
ANA 7 6
ANA 5 5
"AVG 2"列是某行与第-1行之间的平均值。我怎样才能做到这一点?提前致谢
使用 LEAD 函数,您可以获得按 ID 排序的下一行:
DECLARE @table TABLE (Id int, Name nvarchar(10), Poin float)
INSERT INTO @table
VALUES
(1, N'ANA',5),
(2, N'ANA',10),
(3, N'ANA',3),
(4, N'ANA',8),
(5, N'ANA',7),
(6, N'ANA',5)
SELECT
t.Id,
(t.Poin + LEAD(t.Poin, 1, t.Poin) OVER (ORDER BY t.Id)) / 2
FROM @table AS t
LEAD(t.Poin, 1, t.Poin)
LEAD
- 获取下第 N 行
t.Poin
- 列
1
- 向前移动 1 行
t.Poin
- 在没有下一个值时替换最后一行
你可以试试windowing function with OVER()
DECLARE @table TABLE (Id int, Name nvarchar(10), Poin float)
INSERT INTO @table
VALUES
(1, N'ANA',5),
(2, N'ANA',10),
(3, N'ANA',3),
(4, N'ANA',8),
(5, N'ANA',7),
(6, N'ANA',5);
SELECT AVG(Poin) OVER(PARTITION BY Name
ORDER BY Id
ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING)
FROM @table;
结果
7,5
6,5
5,5
7,5
6
5
重要:
请注意,在您的 table 中 没有隐式顺序 。没有特定的 ORDER BY
结果是随机的!
我有一个 table 这样的:
Name Poin
================
ANA 5
ANA 10
ANA 3
ANA 8
ANA 7
ANA 5
我想像这样连续获取最后 2 行的 AVG:
Name Poin AVG 2
=========================
ANA 5 7.5
ANA 10 6.5
ANA 3 5.5
ANA 8 7.5
ANA 7 6
ANA 5 5
"AVG 2"列是某行与第-1行之间的平均值。我怎样才能做到这一点?提前致谢
使用 LEAD 函数,您可以获得按 ID 排序的下一行:
DECLARE @table TABLE (Id int, Name nvarchar(10), Poin float)
INSERT INTO @table
VALUES
(1, N'ANA',5),
(2, N'ANA',10),
(3, N'ANA',3),
(4, N'ANA',8),
(5, N'ANA',7),
(6, N'ANA',5)
SELECT
t.Id,
(t.Poin + LEAD(t.Poin, 1, t.Poin) OVER (ORDER BY t.Id)) / 2
FROM @table AS t
LEAD(t.Poin, 1, t.Poin)
LEAD
- 获取下第 N 行t.Poin
- 列1
- 向前移动 1 行t.Poin
- 在没有下一个值时替换最后一行
你可以试试windowing function with OVER()
DECLARE @table TABLE (Id int, Name nvarchar(10), Poin float)
INSERT INTO @table
VALUES
(1, N'ANA',5),
(2, N'ANA',10),
(3, N'ANA',3),
(4, N'ANA',8),
(5, N'ANA',7),
(6, N'ANA',5);
SELECT AVG(Poin) OVER(PARTITION BY Name
ORDER BY Id
ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING)
FROM @table;
结果
7,5
6,5
5,5
7,5
6
5
重要:
请注意,在您的 table 中 没有隐式顺序 。没有特定的 ORDER BY
结果是随机的!