gpt4 book ai didi

sql - 在 SQL Server 中使用 LAG() 和 LEAD() 函数时是否可以忽略 NULL 值?

转载 作者:行者123 更新时间:2023-12-04 08:25:15 24 4
gpt4 key购买 nike

如您所知,LAG() 和 LEAD() 分析函数无需使用自联接即可访问同一结果集中前一行和下一行的数据。但是在访问 NOT NULL 值之前是否可以忽略 NULL 值?

最佳答案

它可以使用窗口函数。
看看这个 article由 Itzik Ben-Gan 提供更多详细信息。
在下面的代码中,cte 获取最新的 NOT NULL id 值,然后下一个选择获取实际的列值。本示例使用 LAG。
例如。

-- DDL for T1
SET NOCOUNT ON;
USE tempdb;
IF OBJECT_ID(N'dbo.T1', N'U') IS NOT NULL DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1
(
id INT NOT NULL CONSTRAINT PK_T1 PRIMARY KEY,
col1 INT NULL
);

-- Small set of sample data
TRUNCATE TABLE dbo.T1;

INSERT INTO dbo.T1(id, col1) VALUES
( 2, NULL),
( 3, 10),
( 5, -1),
( 7, NULL),
(11, NULL),
(13, -12),
(17, NULL),
(19, NULL),
(23, 1759);

;WITH C AS
(
SELECT
id,
col1,
MAX(CASE WHEN col1 IS NOT NULL THEN id END) OVER(ORDER BY id ROWS UNBOUNDED PRECEDING) AS grp
FROM dbo.T1
)
SELECT
id,
col1,
(SELECT col1 FROM dbo.T1 WHERE id = grp) lastval
FROM C;

关于sql - 在 SQL Server 中使用 LAG() 和 LEAD() 函数时是否可以忽略 NULL 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24338119/

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