【发布时间】:2021-02-12 06:46:52
【问题描述】:
我正在尝试对前两行进行简单的平均。复杂的部分是如果一行在 score 列中包含 NULL,我想做最后 2 NON NULL 行的平均值。
按非空排序不起作用,因为它将当前行与其余非空行放在一起。类似地,创建一个单独的非空行号也会产生同样的问题。我假设我必须通过外部连接来解决问题,但只是检查是否有人知道对以下代码进行更简单的调整)。
示例数据:
DECLARE @tbl TABLE
(
Team varchar(1),
date date,
Score int
);
INSERT INTO @tbl (Team, Date, Score)
VALUES
('a', '2020/12/05', null),
('a', '2020/12/04', null),
('a', '2020/12/03', null),
('a', '2020/12/02', null),
('a', '2020/11/04', '2'),
('a', '2020/10/03', '4'),
('a', '2020/08/02', '6'),
('a', '2020/06/01', '8');
SELECT
date,
avg(SCORE+0.0) OVER (partition by Team ORDER BY Date ASC ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) AS Average
FROM
@tbl
ORDER BY
Date DESC
输出:
+--------+------------+------------+
| Row | Current | Required |
+--------+------------+------------+
| 1 | NULL | 3 |
| 2 | NULL | 3 |
| 3 | 2 | 3 |
| 4 | 3 | 3 |
| 5 | 5 | 5 |
| 6 | 7 | 7 |
| 7 | 8 | 8 |
| 8 | NULL | NULL |
+--------+------------+------------+
【问题讨论】:
-
我觉得你的输入输出有问题。请检查您的数据,如果需要任何更改,请更新您的问题。我会很容易检查。
-
它只需要作为一个查询运行。我已经消除了数据和 SELECT 查询之间的差距。谢谢。
标签: sql sql-server-2017