Oracle Query - Получение условного максимального значения - PullRequest
3 голосов
/ 17 ноября 2010

В 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;

Что я пытаюсь сделать, это получить максимальный идентификатор, где мое условиесоответствует входной переменной, но имеет приоритет для строк, которые не имеют условного флага.

Большая часть моего опыта работы с базами данных связана с SQL Server, где я хотел бы сделать что-то вроде этого:

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

Но, похоже, это не работает в Oracle или, что более вероятно,... Я не делаю это правильно.Кто-нибудь может дать какой-нибудь совет?

Спасибо!

1 Ответ

4 голосов
/ 17 ноября 2010

Я считаю, что 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...