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

表: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 执行时,这似乎很好,但我们的期望是这种同一种查询一次应该针对多个 id 执行。

是否有可能添加一种 for-each 或添加任何其他 where 或 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 回答