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

在MS SQL Server中如何获取每行12个关联日期的最小/最大值?

获取每行的最小和最大日期(MS SQL Server)

当然可以实现!针对你这种单条患者记录里包含12个关联日期列的场景,MS SQL Server有几种实用的方法,下面分情况给你具体示例:

方法1:兼容所有SQL Server版本(推荐)

如果你的SQL Server版本低于2022,或者需要保证全版本兼容性,可以用CROSS APPLY结合VALUES子句把每行的多个日期列转换成行,再对这些行做聚合计算。假设你的视图里的日期列是date_1、date_2...date_12,示例代码如下:

SELECT 
    v.patientId,
    MIN(d.date_value) AS earliest_date,
    MAX(d.date_value) AS latest_date
FROM 
    YourViewName v
CROSS APPLY (
    VALUES 
        (v.date_1), (v.date_2), (v.date_3), (v.date_4),
        (v.date_5), (v.date_6), (v.date_7), (v.date_8),
        (v.date_9), (v.date_10), (v.date_11), (v.date_12)
) d(date_value)
GROUP BY 
    v.patientId;

关键说明:

  • CROSS APPLY会把每行的12个日期列拆成12条行记录,让我们能轻松对这些分散的日期做最小/最大值计算。
  • 如果某些日期列可能为NULL,MIN()和MAX()会自动忽略空值,只统计非空的有效日期。

方法2:SQL Server 2022及以上版本简化写法

从SQL Server 2022开始,官方新增了LEAST()和GREATEST()函数,能直接在单行内比较多个值并返回最小/最大值,写法更简洁:

SELECT 
    patientId,
    LEAST(date_1, date_2, date_3, date_4, date_5, date_6, date_7, date_8, date_9, date_10, date_11, date_12) AS earliest_date,
    GREATEST(date_1, date_2, date_3, date_4, date_5, date_6, date_7, date_8, date_9, date_10, date_11, date_12) AS latest_date
FROM 
    YourViewName;

关键说明:

  • LEAST()返回参数列表中的最小值,GREATEST()返回最大值,逻辑和方法1完全一致。
  • 同样会自动忽略NULL值,只要该行存在至少一个非空日期,就能得到正确结果。

记得把代码里的YourViewName替换成你实际的视图名称,date_1到date_12替换成你视图里对应的日期列名哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:41:34