将多个日期列合并为一个日期列
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
我想通过在不包括空值的日期列中取最小日期值来组合多个日期列。我尝试了各种方法,例如使用 '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