2013-08-20 76 views
0

表:detail1SQL查詢迭代像對於每個

LN_ID  LN_DATE LN_CATG 
---------- -------- ------- 
1693834961 8/1/2013  16 
1693834961 7/1/2013  16 
1693834961 6/1/2013   4 
1693834961 5/1/2013  16 
1693834962 8/1/2013  16 
1693834962 7/1/2013  16 
1693834962 6/1/2013  16 
1693834962 5/1/2013   5 

表:detail2

LN_ID  LN_MOD_DATE LN_PYMT_DATE 
---------- ----------- ------------ 
1693834961 8/1/2012  1/1/2011 
1693834961 9/1/2011  2/1/2011 
1693834962 10/1/2012 3/1/2012 

結果:

LN_ID  FIRST_DT LAST_DT LN_MOD_DT LN_PYMT_DT 
---------- -------- -------- --------- ---------- 
1693834961 8/1/2013 6/1/2013 8/1/2012 1/1/2011 

查詢:

SELECT ln_id, first_dt, last_dt, ln_mod_dt, ln_pymt_dt FROM 
(SELECT a.ln_id ln_id, a.ln_date first_dt, 
       b.ln_date last_dt, c.ln_mod_date ln_mod_dt, 
       c.ln_pymt_date ln_pymt_dt 
      FROM detail1 a, 
       (SELECT * 
        FROM (SELECT * 
           FROM detail1 
          WHERE ln_id = '1693834961' 
           AND ln_catg <> 16 
          ORDER BY ln_date DESC) 
        WHERE ROWNUM < 2) b, 
       (SELECT * 
        FROM (SELECT * 
           FROM detail2 
          WHERE ln_id = '1693834961' 
          ORDER BY ln_mod_date DESC) 
        WHERE ROWNUM < 2) c 
      WHERE a.ln_id = b.ln_id 
      AND a.ln_id = c.ln_id 
      AND a.ln_catg = 16 
     ORDER BY a.ln_date DESC) 
WHERE ROWNUM < 2 

我需要從每個LN_ID的detail1表中連續找到ln_catg = 16的第一個(最新)和最後一個日期。

例如,預計輸出中的,

LN_ID  FIRST_DT LAST_DT LN_MOD_DT LN_PYMT_DT 
    ---------- -------- -------- --------- ---------- 
    1693834961 8/1/2013 7/1/2013 8/1/2012 1/1/2011 
    1693834962 8/1/2013 6/1/2013 8/1/2012 1/1/2012 
    -------- 

這個工作似乎不錯,當查詢執行對一個ln_id在時刻,但我們的預期是這一相同類型的查詢應執行對一個以上的IDS一次。

是否有可能爲每個添加種類或添加任何其他位置或IN Condtion來傳遞不同的iD?因爲在子查詢ln_id硬編碼不知道如何使用一個和另一個,並執行..

任何幫助將apperciated。

+0

這是怎麼表2 mod_date是被取出。我的意思是PIC哪一行,是基於什麼condition.And萬一有表1中只有一條記錄,那麼這將是第一個和最後一個日期 –

+0

這兩個表結合ln_id。如果detail2表中有多條記錄,我應該從中選擇最新記錄。如果第一個表中只有一條記錄,它將返回null或相同記錄。 – user2309604

回答

0

我想這會做到嗎?

SELECT 
    D1.LN_ID, 
    MAX(D1.LN_DATE) AS FIRST_DT, 
    MAX(D1_A.LN_DATE) AS LAST_DT, 
    MAX(D2.LN_MOD_DATE) AS LN_MOD_DT, 
    MAX(D2.LN_PYMT_DATE) AS LN_PYMT_DT 
FROM 
    DETAIL1 D1 
    INNER JOIN DETAIL2 D2 ON D1.LN_ID=D2.LN_ID 
    INNER JOIN DETAIL1 D1_A ON D1_A.LN_ID=D1.LN_ID 
WHERE 
    D1.LN_CATG = 16 
    AND D1_A.LN_CATG = 16 
    AND D1_A.LN_DATE < D1.LN_DATE 
GROUP BY 
    D1.LN_ID 
+0

感謝Jymbo。只有一個更正需要,因爲當detail2表有多個記錄的ln_id然後我應該只選擇最新的(max(ln_mod_date))記錄。但現在它返回兩個記錄。我做了嘗試,但似乎總是返回兩個.. – user2309604

+0

你能給我一個從你的數據中返回兩個數據集的例子嗎?我使用了你在問題中發佈的數據集,並且我只獲得了1條記錄,分別是1693834961和1693834962 – jymbo

+0

我更新了Table:detail2數據集,如果日期不同,它將爲ln_Id拉取兩條記錄。在該特定貸款ID的detail2表中的任意數量的記錄之間具有最大D2.LN_MOD_DATE記錄的記錄。感謝您的巨大幫助。 – user2309604