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

Netezza环境下合并多日期列取非空最小日期值实现咨询

解决方案

方案1:转置后聚合取最小值(推荐,列数较多的场景更易用)

你可以先将多个日期列转成行,过滤空值后按表主键分组取最小值即可。假设你的表名为your_table,主键列是id,待比较的日期列为date1、date2、date3、date4,示例代码如下:

SELECT 
    id,
    MIN(dt) AS min_date
FROM (
    SELECT id, date1 AS dt FROM your_table
    UNION ALL
    SELECT id, date2 AS dt FROM your_table
    UNION ALL
    SELECT id, date3 AS dt FROM your_table
    UNION ALL
    SELECT id, date4 AS dt FROM your_table
) unpivoted_data
WHERE dt IS NOT NULL
GROUP BY id

如果你的Netezza版本支持UNNEST函数,可以写得更简洁:

SELECT 
    t.id,
    MIN(u.dt) AS min_date
FROM your_table t
CROSS JOIN UNNEST(ARRAY(t.date1, t.date2, t.date3, t.date4)) u(dt)
WHERE u.dt IS NOT NULL
GROUP BY t.id

方案2:CASE WHEN手动判断(列数较少的场景性能更优)

如果待比较的日期列只有2-3列,可以直接写判断逻辑实现,示例代码(以3个日期列为例):

SELECT
    date1,
    date2,
    date3,
    CASE
        WHEN date1 IS NULL AND date2 IS NULL AND date3 IS NULL THEN NULL
        WHEN date1 IS NULL AND date2 IS NULL THEN date3
        WHEN date1 IS NULL AND date3 IS NULL THEN date2
        WHEN date2 IS NULL AND date3 IS NULL THEN date1
        WHEN date1 IS NULL THEN CASE WHEN date2 < date3 THEN date2 ELSE date3 END
        WHEN date2 IS NULL THEN CASE WHEN date1 < date3 THEN date1 ELSE date3 END
        WHEN date3 IS NULL THEN CASE WHEN date1 < date2 THEN date1 ELSE date2 END
        ELSE CASE 
            WHEN date1 < date2 AND date1 < date3 THEN date1
            WHEN date2 < date1 AND date2 < date3 THEN date2
            ELSE date3 
        END
    END AS min_date
FROM your_table

内容的提问来源于stack exchange,提问作者Prajwal Mani Pradhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 12:24:03