select 来自三个不同列的最小值 oracle
select minimum value from three different columns oracle
我有三个表(IDENTIFIER、LOCGRP、AFFILIATION),它们由一列 (id
) 连接。它们每个都有 "START_DT" 列,我想要这些列中的最小值。此外,我需要 select 跨列的每个 id 的最小开始日期。我用来说明的 SQL 是:
SELECT id, min(min_i_start, min_lg_start, min_af_start) AS min_start
FROM (
SELECT
i.id
, min(i.START_DT) AS min_i_start
, min(lg.START_DT) AS min_lg_start
, min(af.START_DT) AS min_af_start
FROM IDENTIFIER i
INNER JOIN LOCGRP lg ON lg.id = i.id
INNER JOIN AFFILIATION af ON af.id = i.id
GROUP BY i.id
)
当然,我知道这行不通,因为 min()
是 Oracle 中的聚合函数,所以它给出 ORA-00909: invalid number of arguments
。但它说明了我的 objective:从三列中获取最小值。
重申:内部子查询select每条记录的三个最小日期。我想进一步 select 每条记录的最小值(一个值)中的最小值。
SQLfiddle来说明:http://sqlfiddle.com/#!4/9cf9d9/2
有什么建议吗?
不是MIN
,而是LEAST
:
least(min_i_start, min_lg_start, min_af_start)
我有三个表(IDENTIFIER、LOCGRP、AFFILIATION),它们由一列 (id
) 连接。它们每个都有 "START_DT" 列,我想要这些列中的最小值。此外,我需要 select 跨列的每个 id 的最小开始日期。我用来说明的 SQL 是:
SELECT id, min(min_i_start, min_lg_start, min_af_start) AS min_start
FROM (
SELECT
i.id
, min(i.START_DT) AS min_i_start
, min(lg.START_DT) AS min_lg_start
, min(af.START_DT) AS min_af_start
FROM IDENTIFIER i
INNER JOIN LOCGRP lg ON lg.id = i.id
INNER JOIN AFFILIATION af ON af.id = i.id
GROUP BY i.id
)
当然,我知道这行不通,因为 min()
是 Oracle 中的聚合函数,所以它给出 ORA-00909: invalid number of arguments
。但它说明了我的 objective:从三列中获取最小值。
重申:内部子查询select每条记录的三个最小日期。我想进一步 select 每条记录的最小值(一个值)中的最小值。
SQLfiddle来说明:http://sqlfiddle.com/#!4/9cf9d9/2
有什么建议吗?
不是MIN
,而是LEAST
:
least(min_i_start, min_lg_start, min_af_start)