2010-11-17 198 views
3

在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一样,或者更可能......我没有正确地做。任何人都可以提供建议吗?

谢谢!

回答

4

我相信甲骨文相当于:

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; 
+0

谢谢!这正是我所需要的。我尝试了类似的方法,但在内部查询中我有'where rownum = 1'。我没有想过要围绕这个做一个外部查询。再次感谢! – Brosto 2010-11-17 17:41:19