MIN из списка полей в записи - PullRequest
4 голосов
/ 12 июля 2011

У меня есть таблица с 3 полями даты.Я пытаюсь найти наименьшую из трех дат в каждой записи.

Я хотел бы сделать следующее:

Select id, some_value, date_a, date_b, date_c,
        min(date_a, date_b, date_c) as smallest_date
from some_table;

, но это явно не работает.Не существует правила, которое предполагает, что дата может быть больше, чем другие, и иногда любое их число (ни одно для всех) может быть ПУСТО (NULL).Я уверен, что где-то видел элегантное решение, которое не включало бы множество уродливых операторов case и проверок на null, но я просто не могу вспомнить, как это сделать.

(Oracle10g)

1 Ответ

8 голосов
/ 12 июля 2011

Вам нужна функция LEAST:

SELECT LEAST(date_a, date_b, date_c) as smallest_date
FROM some_table;

AFAIK, если некоторые из них могут быть нулевыми, вам придется использовать NVL для каждого столбца, чтобы установить значение по умолчанию:

SELECT LEAST(NVL(date_a,sysdate), NVL(date_b,sysdate), NVL(date_c,sysdate)) as smallest_date
FROM some_table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...