2010-03-18 6 views
4

Je voudrais obtenir la dernière date d'enregistrements modifiés. Voici un exemple simple SELECT:Comment puis-je sélectionner la valeur maximale de plusieurs tables dans une colonne

SELECT 
t01.name, 
t01.last_upd date1, 
t02.last_upd date2, 
t03.last_upd date3, 
'maxof123' maxdate 
FROM 
    s_org_ext t01, 
    s_org_ext_x t02, 
    s_addr_org t03 
WHERE 
    t02.par_row_id(+)= t01.row_id and 
    t03.row_id(+)= t01.pr_addr_id and 
    t01.int_org_flg = 'n'; 

Comment puis-je obtenir la colonne maxdate pour afficher le maximum des trois dates?

Note: pas UNION ou sous/instructions SELECT imbriquées;)

Répondre

11

plus grand (t01.last_upd, t02.last_upd date2, t03.last_upd) comme MaxDate

+4

+1, bien être prudent avec les valeurs NULL: 'plus grand (X, NULL)' est nulle (et dans ce cas, nous nous attendons à NULLs car il y a une jointure externe) –

+0

Il semble que cette fonction est pas prise en charge/installé . Ai-je besoin d'un package spécial pour Oracle 10/11? –

+0

Pas que je sache, il a été autour pendant un moment. http://www.techonthenet.com/oracle/functions/greatest.php – heisenberg

2

utiliser une instruction CASE dans votre clause SELECT pour faire quelque chose comme:

CASE WHEN date1 > date2 AND date1 > date3 THEN date1 WHEN date2 > date3 THEN date2 ELSE date3 END AS maxdate 

Il éclatera de la logique dès la première condition est remplie.

0

Utilisez la fonction GREATEST, rejoint également utilisé explicite plutôt que des jointures implicites.

SELECT t01.name, t01.last_upd date1, t02.last_upd date2, t03.last_upd date3, 
GREATEST(t01.last_upd, t02.last_upd, t03.last_upd) AS maxdate 
FROM s_org_ext t01 
LEFT OUTER JOIN s_org_ext_x t02 ON t01.row_id = t02.par_row_i 
LEFT OUTER JOIN s_addr_org t03 ON t01.pr_addr_id = t03.row_id 
WHERE t01.int_org_flg = 'n'; 
Questions connexes