gpt4 book ai didi

sql - 如何在 MIN 或 MAX 中包含空值?

转载 作者:行者123 更新时间:2023-12-01 17:40:46 28 4
gpt4 key购买 nike

我有一个表,用于存储时间跨度数据。该表的架构类似于:

ID INT NOT NULL IDENTITY(1,1)   
RecordID INT NOT NULL
StartDate DATE NOT NULL
EndDate DATE NULL

我正在尝试计算每个记录 ID 的开始日期和结束日期,即最小 StartDate 和最大 EndDate。 StartDate 不可为空,因此我不需要担心这一点,但我需要 MAX(EndDate) 来表示这是当前正在运行的时间跨度。

维护 EndDate 的 NULL 值并将其视为最大值非常重要。

最简单的尝试(如下)不起作用,突出显示 MIN 和 MAX 将忽略 NULL 的问题(来源:http://technet.microsoft.com/en-us/library/ms179916.aspx)。

SELECT recordid, MIN(startdate), MAX(enddate) FROM tmp GROUP BY recordid

我已经创建了一个 SQL Fiddle,并完成了基本设置。

http://sqlfiddle.com/#!3/b0a75

我怎样才能让 SQL Server 2008 屈服于我的意愿,从 SQLFiddle 中给出的数据产生以下结果?

RecordId  Start       End  
1 2009-06-19 NULL
2 2012-05-06 NULL
3 2013-01-25 NULL
4 2004-05-06 2009-12-01

最佳答案

这有点难看,但因为 NULL 对您来说有特殊的意义,这是我能想到的最简洁的方法:

SELECT recordid, MIN(startdate),
CASE WHEN MAX(CASE WHEN enddate IS NULL THEN 1 ELSE 0 END) = 0
THEN MAX(enddate)
END
FROM tmp GROUP BY recordid

也就是说,如果任何行有 NULL,我们希望强制将其作为答案。仅当没有行包含 NULL 时,我们才应返回 MIN(或 MAX)。

关于sql - 如何在 MIN 或 MAX 中包含空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21286215/

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