2017-03-01 1 views
0

Dans le cadre de mon projet, j'ai besoin d'afficher la dernière date des deux colonnes dans la troisième colonne dans la table Oracle. Si les dates sont identiques, la dernière date devrait s'afficher en fonction de l'heure. Aidez-moi, s'il vous plaît. Merci d'avance.Besoin de la dernière date à partir de 2 colonnes dans Oracle

E.g.1:

col1     col2    col3 
12-FEB-17 03:24:23 15-FEB-17 08:12:52 15-FEB-17 08:12:52 

Il doit afficher les données col2 dans col3 comme il est de 3 jours derniers que col1.

E.g.2:

col1    col2    col3 
02-FEB-17 03:01:57 02-FEB-17 03:01:59 02-FEB-17 03:01:59 

Il doit afficher les données col2 dans col3 comme il est de 2 secondes dernières que col1.

Répondre

1

Vous pouvez simplement utiliser la fonction GREATEST(). Par exemple:

with test as 
(select to_date('12-FEB-2017 03:24:23','DD-MON-YYYY HH24:MI:SS') col1, 
     to_date('15-FEB-2017 08:12:52','DD-MON-YYYY HH24:MI:SS') col2 from dual union all 
    select to_date('02-FEB-2017 03:01:57','DD-MON-YYYY HH24:MI:SS') , 
     to_date('02-FEB-2017 03:01:59','DD-MON-YYYY HH24:MI:SS') from dual 
) 
select col1, col2, greatest(col1, col2) col3 
from test 


COL1     COL2     COL3 
-------------------- -------------------- -------------------- 
12-FEB-2017 03:24:23 15-FEB-2017 08:12:52 15-FEB-2017 08:12:52 
02-FEB-2017 03:01:57 02-FEB-2017 03:01:59 02-FEB-2017 03:01:59 
+0

Merci Bob. Cela marche. J'ai fait erreur en utilisant la fonction to_date précédemment. Maintenant c'est parfait. Merci beaucoup .. –

+0

[Ici] (http://stackoverflow.com/help/someone-answers) vous trouvez quelque chose sur quoi faire quand quelqu'un vous répond. – Aleksej

0

Utilisez greatest mais avec NVL. Sans NVL, si vous avez null s alors null sera la sortie de greatest

select col1,col2, 
greatest(
    nvl(col1,to_date('1901-01-01','YYYY-MM-DD')), 
    nvl(col2,to_date('1901-01-01','YYYY-MM-DD')) 
     ) as col3 
from your_table; 
0

Je n'aime vraiment en utilisant fait des dates, parce que si les deux sont nuls? Vous obtiendriez 1901-01-01. Mieux encore, utilisez COALESCE pour renvoyer la valeur non nulle:

WITH your_table 
    AS (SELECT 'COL1 Greater' test, SYSDATE col1, SYSDATE - 10 col2 
      FROM DUAL 
     UNION ALL 
     SELECT 'COL2 Greater', SYSDATE col1, SYSDATE + 10 col2 
      FROM DUAL 
     UNION ALL 
     SELECT 'COL1 null', NULL, SYSDATE col2 
      FROM DUAL 
     UNION ALL 
     SELECT 'Both null', NULL, NULL 
      FROM DUAL) 
SELECT test 
    , TO_CHAR (col1, 'YYYY.MM.DD') col1 
    , TO_CHAR (col2, 'YYYY.MM.DD') col2 
    , TO_CHAR (GREATEST (COALESCE (col1, col2), COALESCE (col2, col1)), 'YYYY.MM.DD') AS col3 
    FROM your_table; 


TEST   COL1  COL2  COL3  
------------ ---------- ---------- ---------- 
COL1 Greater 2017.03.01 2017.02.19 2017.03.01 
COL2 Greater 2017.03.01 2017.03.11 2017.03.11 
COL1 null    2017.03.01 2017.03.01 
Both null