表:detail1
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
我需要从detail1表中为每个LN_ID连续找到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执行。
是否可以添加各种各样的或者添加任何其他的或者IN IN Condtion传递不同的iD?因为子查询中的ln_id硬代码不确定如何使用一个和另一个并执行..
任何帮助都会得到解决。
答案 0 :(得分: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