从三个不同的列中选择最小值

时间:2020-01-07 20:02:08

标签: oracle min

我有三个表(IDENTIFIER,LOCGRP,AFFILIATION),它们由一列(id)连接。它们每个都有“ START_DT”列,而我希望这些列最少。此外,我需要为各列中的每个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。但这说明了我的目标:从三列中获取最小值。

要重述:内部子查询为每个记录选择三个最小日期。我想进一步为每条记录选择最小值的最小值(一个值)。

SQL小提琴来说明:http://sqlfiddle.com/#!4/9cf9d9/2

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

不是MIN,而是LEAST

least(min_i_start, min_lg_start, min_af_start)