2010-04-21 7 views
14

Je dois mettre à jour une ligne avec une formule basée sur la plus grande valeur de deux colonnes DATETIME. Je ferais normalement ceci:La plus grande colonne non nulle

GREATEST(date_one, date_two) 

Cependant, les deux colonnes peuvent être NULL. J'ai besoin de la date la plus élevée même lorsque l'autre est NULL (bien sûr, j'attends NULL lorsque les deux sont NULL) et GREATEST() renvoie NULL lorsque l'une des colonnes est NULL.

Cela semble fonctionner:

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

Mais je me demande ... suis-je manque une méthode plus simple?

Répondre

15

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

+0

de Nice! Merci beaucoup. J'espère juste que je n'aurai jamais besoin de généraliser cela pour les colonnes ** n ** ... ;-P –

+1

Ok, mais qu'en est-il de plus de 2 colonnes impliquées? Et s'il y a 10 colonnes? –

+0

@Vadim K. belle réponse !! – sanghavi7

0

Cela ressemble à la meilleure solution pour moi. C'est mieux que d'utiliser NVL et une date "magique" car cela ne retournerait pas null si les deux valeurs étaient nulles.

1

Ma solution pour plusieurs colonnes est:

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; 
Questions connexes