Oracle Query - 获取条件最大值

时间:2010-11-17 17:34:14

标签: oracle

在Oracle中,有一种简单的方法可以在单个查询中执行此操作,还是这是正确的方法?

SELECT MAX(ID) INTO n_FOO_ID FROM FOO WHERE BAR = n_InputVar and ConditionalFlag IS NULL;

IF n_FOO_ID IS NULL OR n_FOO_ID = 0 THEN
    SELECT MAX(ID) INTO n_FOO_ID FROM FOO WHERE BAR = n_InputVar;
END IF;

我要做的是获取条件与输入变量匹配的最大ID,但优先考虑没有条件标志的行。

我的大部分数据库经验都在SQL Server中,我会做这样的事情:

SELECT TOP 1 ID INTO @FooID FROM FOO WHERE Bar = @InputVar ORDER BY ConditionalFlag, ID DESC

但这似乎在Oracle上不一样,或者更可能......我没有正确地做到这一点。任何人都可以提供任何建议吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

我相信Oracle相当于:

SELECT TOP 1 ID 
INTO @FooID 
FROM FOO 
WHERE Bar = @InputVar ORDER BY ConditionalFlag, ID DESC

SELECT ID FROM
( SELECT ID 
  INTO FooID 
  FROM FOO 
  WHERE Bar = InputVar ORDER BY ConditionalFlag, ID DESC
) WHERE ROWNUM = 1;