2016-09-02 7 views
0

Db2にテーブルmyTableがあります。それはいくつかの列を持っているdb2内の2つの列間のNULL値の最大値の検索

a | b | date1  | date2 
--------------------------------------------- 
1 abc  <null>  2014-09-02 
2 aax  2015-12-30 2016-09-02 
2 bax  2015-10-20 <null> 
2 ayx  2014-12-10 2016-02-12 

上記の値からわかるように、date1date2は同様null値を持つことができます。

date1date2の両方の最大値を一緒に取得するにはどうすればよいですか?

つまり、クエリの出力は、date1date2に存在するすべての日付の最大日付であるため、2016-09-02である必要があります。

私はDb2-9を使用しています。

読んでいただきありがとうございます!

答えて

1

どうUNIONクエリを使用してについて:

SELECT MAX(t.newDate) 
FROM 
(
    SELECT date1 AS newDate 
    FROM myTable 
    UNION 
    SELECT date2 AS newDate 
    FROM myTable 
) t 

別のオプション:

SELECT CASE WHEN t.date1 > t.date2 THEN t.date1 ELSE t.date2 END 
FROM 
(
    SELECT (SELECT MAX(date1) FROM myTable) AS date1, 
      (SELECT MAX(date2) FROM myTable) AS date2 
    FROM SYSIBM.SYSDUMMY1 
) t 
+1

あなたは私のために速すぎる入力... – jarlh

+0

LOL ...今朝私はGordon Linoffによって完全に揺さぶられましたが、私はその時に携帯電話にいました:-) –

+0

ANSI SQLは予約語として 'date'を持っています。 db2についてはどうですか? (はい、ゴードンは大成功です...) – jarlh

0

MAX()が面白い獣です...

それはスカラー関数と集約の両方として利用可能です1。

だから、あなたが本当に必要なのは

select max(max(coalesce(date1,'0001-01-01') 
       ,coalesce(date2,'0001-01-01') 
      ) 
     ) 
from mytable 

MAX()は、内側がスカラー一つであり、集計バージョンです。

関連する問題