You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中如何从多列日期字段获取最大值?替代coalesce方案

如何在SQL Server中获取同一行多列日期的最大值

嘿,我懂你的问题啦——你想用coalesce但发现它只返回第一个非空值,而你实际需要的是每行三个日期列里最大的那个日期,对吧?这就给你两个靠谱的解决方案:

方法1:使用子查询结合MAX()函数(灵活易扩展)

这个方法通过VALUES子句把同一行的三个日期转换成一个临时行集,然后对这个行集取最大值,不管后续要加多少个日期列都能轻松扩展:

declare @t table (date1 date,date2 date,date3 date)
insert into @t values ('2019-01-01','2019-01-20','2019-02-10')
insert into @t values (null,null,'2019-02-01')
insert into @t values (null,'2019-02-01','2019-02-02')

-- 正确查询:获取每行的最大日期
SELECT 
    (SELECT MAX(d) FROM (VALUES(date1), (date2), (date3)) AS v(d)) AS maxdate
FROM @t;

运行这个查询后,你会得到完全符合预期的结果:

maxdate
----------
2019-02-10
2019-02-01
2019-02-02

方法2:使用CASE语句手动比较(适合少量列的场景)

如果你的日期列数量固定且不多,也可以用CASE语句逐一比较列的值,找出最大的那个:

SELECT
    CASE
        WHEN date1 >= date2 AND date1 >= date3 THEN date1
        WHEN date2 >= date1 AND date2 >= date3 THEN date2
        ELSE date3
    END AS maxdate
FROM @t;

这个方法也能得到同样的结果,但如果后续要增加更多日期列,修改起来会比方法1麻烦一些。

为什么coalesce不适用?

再补充下你提到的coalesce的问题:它的逻辑是按参数顺序返回第一个非空值,而不是比较大小。比如第三行的date1是null,date2是2019-02-01,coalesce就直接返回这个值了,但你需要的是更大的2019-02-02,所以它完全不符合你要“取最大值”的需求哦。

内容的提问来源于stack exchange,提问作者Red Devil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:35:33