0

表: 詳細1

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

表: 詳細2

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
    --------

クエリが一度に 1 つの ln_id に対して実行される場合、これはうまく機能するように見えますが、この同じ種類のクエリは一度に複数の ID に対して実行する必要があると予想されます。

for-each の種類を追加するか、または IN Condtion を別の iD に渡すために他の場所を追加することは可能ですか? サブクエリの ln_id ハードコードは、どのように使用して実行するのかわからないため..

どんな助けでも感謝します。

4

1 に答える 1

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
于 2013-08-20T19:56:47.963 に答える