首页 > 数据库 > mysql教程 > 如何使用最近的非 NULL 值在 SQL 中填充 NULL 值?

如何使用最近的非 NULL 值在 SQL 中填充 NULL 值?

DDD
发布: 2025-01-05 16:52:39
原创
253 人浏览过

How to Fill NULL Values in SQL Using the Most Recent Non-NULL Value?

如何在 SQL 中将一行中的 NULL 值替换为先前已知的值

在数据库管理中,可能会出现需要 NULL 值的情况替换为有意义的数据。一种常见的情况是某列中缺少数据,需要从相邻行推断数据。

考虑一个包含两列“日期”和“数字”的表格:

date   number
----   ------
1      3
2      NULL
3      5
4      NULL
5      NULL
6      2
登录后复制

目标是将“number”列中的 NULL 值替换为“date”列中最新的非 NULL 值。这意味着如果日期 2 的“数字”为 NULL,则应将其替换为 3(之前的已知值)。同样,日期 4 和 5 中的 NULL 值应替换为 5。

在 SQL Server 中,可以使用以下查询来实现此目的:

DECLARE @Table TABLE(
        ID INT,
        Val INT
)

INSERT INTO @Table (ID,Val) SELECT 1, 3
INSERT INTO @Table (ID,Val) SELECT 2, NULL
INSERT INTO @Table (ID,Val) SELECT 3, 5
INSERT INTO @Table (ID,Val) SELECT 4, NULL
INSERT INTO @Table (ID,Val) SELECT 5, NULL
INSERT INTO @Table (ID,Val) SELECT 6, 2

SELECT  *,
        ISNULL(Val, (SELECT TOP 1 Val 
                   FROM @Table 
                   WHERE ID < t.ID AND Val IS NOT NULL 
                   ORDER BY ID DESC))
FROM    @Table t
登录后复制

查询使用子查询在具有 NULL 值的每一行的“Val”列中查找第一个非 NULL 值。然后使用 ISNULL 函数将 NULL 值替换为选定的非 NULL 值。

查询结果如下:

date   number
----   ------
1      3
2      3
3      5
4      5
5      5
6      2
登录后复制

'number 中的 NULL 值' 列已成功替换为 'date' 列中的最新非 NULL 值。该技术对于填充缺失数据并确保各种数据库场景中的数据完整性非常有用。

以上是如何使用最近的非 NULL 值在 SQL 中填充 NULL 值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板