2015-12-09 60 views
0

我遇到SQL語句問題。首先,這裏有值從我的DB2表:SQL DB2 - 使用MAX的嵌入式SELECT

 CLT_ID FP_NDT  PRD_TCD CLP_DATE_CDTTM    FP_SDT  CLP_TCD CLP_DATE 
------------------------------------------------------------------------------------------------ 
    100085059 2015-06-30 01  2015-11-27-20.14.28.295209 2014-07-01 01  0001-01-01 
    100085059 2014-06-30 01  2015-11-27-20.14.28.284432 2013-07-01 01  0001-01-01 
    100085059 2015-06-30 01  2015-11-02-20.04.39.755865 2014-07-01 01  2026-01-30 
    100085059 2014-06-30 01  2015-10-15-00.00.00.001257 2013-07-01 01  2025-02-20 

我的選擇應該與價值(0001-01-01)和最近CLP_DATE_CDTTM返回MIN行CLP_DATE。這裏是我的選擇似乎並不工作:

SELECT MIN(CLP_DATE) 
    FROM TCDECF A 
    WHERE A.CLT_ID   = 100085059 
     AND A.CLP_DATE  >= '2015-10-15' 
     AND A.CLP_DATE_CDTTM = 
     (SELECT MAX(B.CLP_DATE_CDTTM) 
       FROM TCDECF B 
       WHERE B.CLT_ID   = A.CLT_ID 
       AND B.FP_NDT   = A.FP_NDT 
       AND B.PRD_TCD   = A.PRD_TCD) 
    WITH UR; 

此代碼不會返回任何內容。我想是因爲「AND A.CLP_DATE> ='2015-10-15」這一行。有沒有辦法說「選擇任何東西> =比這個日期,但如果它什麼都不返回,那麼返回0001-01-01」?

+0

你能提供一個你期待輸出結果的樣本嗎? – gmiley

+0

我期待'0001-01-01'作爲輸出(根據CLP_DATE_CDTTM列的表中最近的一行,它是CLP_DATE列的MIN值)。 – gamefreak249

回答

1

也許這工作...從WHERE子句刪除日期檢查,而不是SELECT列表中的條件MIN。如果未找到,則使用COALESCE返回該值,或使用0001-01-01(即NULLMIN)。

SELECT COALESCE(MIN(case when A.CLP_DATE >= '2015-10-15' then A.CLP_DATE end),date'0001-01-01') 
    FROM TCDECF A 
    WHERE A.CLT_ID   = 100085059 
     AND A.CLP_DATE_CDTTM = 
     (SELECT MAX(B.CLP_DATE_CDTTM) 
       FROM TCDECF B 
       WHERE B.CLT_ID   = A.CLT_ID 
       AND B.FP_NDT   = A.FP_NDT 
       AND B.PRD_TCD   = A.PRD_TCD) 
    WITH UR;