gpt4 book ai didi

sql - T-SQL : Best way to replace NULL with most recent non-null value?

转载 作者:行者123 更新时间:2023-12-02 09:14:51 24 4
gpt4 key购买 nike

假设我有这张表:

+----+-------+
| id | value |
+----+-------+
| 1 | 5 |
| 2 | 4 |
| 3 | 1 |
| 4 | NULL |
| 5 | NULL |
| 6 | 14 |
| 7 | NULL |
| 8 | 0 |
| 9 | 3 |
| 10 | NULL |
+----+-------+

我想编写一个查询,将用表中该列中非空的最后一个值替换任何 NULL 值。

我想要这样的结果:

+----+-------+
| id | value |
+----+-------+
| 1 | 5 |
| 2 | 4 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 14 |
| 7 | 14 |
| 8 | 0 |
| 9 | 3 |
| 10 | 3 |
+----+-------+

如果以前的值不存在,那么 NULL 是可以的。理想情况下,这应该能够与 ORDER BY 一起工作。例如,如果我 ORDER BY [id] DESC:

+----+-------+
| id | value |
+----+-------+
| 10 | NULL |
| 9 | 3 |
| 8 | 0 |
| 7 | 0 |
| 6 | 14 |
| 5 | 14 |
| 4 | 14 |
| 3 | 1 |
| 2 | 4 |
| 1 | 5 |
+----+-------+

或者如果我 ORDER BY [value] DESC 会更好:

+----+-------+
| id | value |
+----+-------+
| 6 | 14 |
| 1 | 5 |
| 2 | 4 |
| 9 | 3 |
| 3 | 1 |
| 8 | 0 |
| 4 | 0 |
| 5 | 0 |
| 7 | 0 |
| 10 | 0 |
+----+-------+

认为这可能涉及某种分析函数——以某种方式对值列进行分区——但我不确定去哪里查看。

最佳答案

您可以使用运行总和来设置组并使用最大值来填充空值。

select id,max(value) over(partition by grp) as value
from (select id,value,sum(case when value is not null then 1 else 0 end) over(order by id) as grp
from tbl
) t

over() 子句更改为 order by value desc 以获得问题中的第二个结果。

关于sql - T-SQL : Best way to replace NULL with most recent non-null value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48106564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com