Наибольший ненулевой столбец

Мне нужно обновить строку с помощью формулы, основанной на наибольшем значении двух столбцов DATETIME. Я обычно делаю так:

GREATEST(date_one, date_two)

Однако оба столбца могут иметь значение NULL. Мне нужна наибольшая дата, даже если другая равна NULL (конечно, я ожидаю NULL, когда оба имеют значение NULL), а GREATEST() возвращает NULL, когда один из столбцов равен NULL.

Кажется, это работает:

GREATEST(COALESCE(date_one, date_two), COALESCE(date_two, date_one))

Но мне интересно... я пропустил более простой метод?


person Álvaro González    schedule 21.04.2010    source источник


Ответы (2)


Мое решение для нескольких столбцов:

SELECT NULLIF(
  GREATEST(
    NVL(NULL,     to_date('01011980','ddmmyyyy')), --COLUMN 1
    NVL(sysdate,  to_date('01011980','ddmmyyyy')), --COLUMN 2
    NVL(NULL,     to_date('01011980','ddmmyyyy')), --COLUMN 3
    NVL(sysdate-1,to_date('01011980','ddmmyyyy'))  --COLUMN 4
  ),to_date('01011980','ddmmyyyy')
) as greatest_date
FROM DUAL;
person Joey11    schedule 14.10.2014

person    schedule
comment
Хороший! Большое спасибо. Я просто надеюсь, что мне никогда не понадобится обобщать это для n столбцов... ;-P - person Álvaro González; 22.04.2010
comment
Хорошо, но что там задействовано более 2-х столбцов? А если столбцов 10? - person Nick Perkins; 08.07.2011
comment
Для n-столбцов: COALESCE(GREATEST(date_one, date_two.. date_n), date_one, date_two, .. date_n) - person Sanjay Verma; 05.05.2021