最小值Oracle包含子查询的结果

时间:2015-04-13 16:42:30

标签: sql oracle

我在语法方面有点挣扎。

我尝试使用以下代码行,上边界由硬值和子查询或两个子查询确定,选择结果的最小值。

AND ELIGTY_MO_YYYYMM BETWEEN '201407' AND '201412'

预期的改变是:

AND ELIGTY_MO_YYYYMM BETWEEN '201407' AND min('201412', select max(contract boundary) from table blah)

或用另一个子查询替换'201412'

我希望这是一个简单的问题。任何见解将不胜感激=)

3 个答案:

答案 0 :(得分:2)

有几件事......

  1. 比较两个值时,请使用LEASTGREATESTMINMAX仅用于汇总。

  2. 将子查询用作列或表达式中的值时,请将子查询括在括号中。

    AND ELIGTY_MO_YYYYMM BETWEEN '201407' AND
    LEAST('201412, (SELECT MAX(whatever) FROM table))
    

答案 1 :(得分:1)

也许您希望使用least代替。非常通用的例子:

select *
from yourtable
where someval between 0 and 
    least((select min(someval) from yourtable), (select max(someval) from yourtable))

答案 2 :(得分:0)

您可以用多种形式编写第二个where子句:

因为fld< min(val1 , val2)表示fld< val1 and fld< val2,您可以说:

AND ELIGTY_MO_YYYYMM >=201407 
    AND ELIGTY_MO_YYYYMM<= 201412
    AND ELIGTY_MO_YYYYMM<= (select max(contract_boundary) from table)

或者您可以使用case声明:

AND ELIGTY_MO_YYYYMM >=201407 
    AND ELIGTY_MO_YYYYMM <= (
        select max( case 
                       when contract_boundary<201412 then 201412 
                       else contract_boundary end)
        from table)

或使用least

AND ELIGTY_MO_YYYYMM BETWEEN 201407 AND
LEAST(201412, (SELECT MAX(whatever) FROM table))