2010-11-17 151 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