将多个日期列合并为一个日期列

Combine multiple date columns into one date column

我想通过在不包括空值的日期列中取最小日期值来组合多个日期列。我尝试了各种方法,例如使用 'case when' 和 'Min' 函数,但无法清除 NULL 值。我也不是在寻找第一个非 NULL 值。最糟糕的是 'LEAST' 函数在 Netezza 中不可用。

我的虚拟数据(未突出显示的列),我想要的输出(突出显示的列)显示在下面的 table 中:

least() 函数作为 SQL 扩展工具包的一部分提供。

这里是 link to the least() 函数 -> https://www.ibm.com/docs/en/netezza?topic=functions-least

这是安装说明 -> https://www.ibm.com/docs/en/psfa/7.1.0?topic=setup-installing-netezza-sql-extensions-toolkit

SQL 可以从 IBM Fix central 下载工具包。

netezza 系统中的 MIN 和 MAX 函数作为简单的标量函数(以及柱状函数)工作,您可以为它们提供多个参数。本质上与 LEAST 相同。此示例涵盖了 MIN 函数,但 MAX 是相同的:

select min(a)
from (
    select  min(min(1,2),NULL) a
    union all 
    select 10
    union all
    select NULL
) x

结果是 10

使用 NVL(与 DB2 合并函数相同)和某种“infinate”值忽略可能的 NULL 值。将上述语句中的第 3 行替换为:

select  min(min(1,2),nvl(NULL,100)) a

结果现在是 1

在你的情况下,你应该可以这样做:

select patient_id,min(
    nvl(INDEX_DT,'9999-12-31'),
    nvl(PRE_FEVER_DT,'9999-12-31'),
    nvl(POST_FEVER_DT,'9999-12-31'),
    nvl(PRE_DIARR_DT,'9999-12-31'),
    nvl(PRE_DIARR_DT,'9999-12-31'),
    nvl(PRE_COUGH_DT,'9999-12-31'),
    nvl(POST_COUGH_DT,'9999-12-31')
) as signs_DT