【发布时间】:2013-08-20 18:48:20
【问题描述】:
表格: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
我需要从每个 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 硬代码不确定我如何使用一个和另一个并执行..
如有任何帮助,将不胜感激。
【问题讨论】:
-
这个表 2 mod_date 是如何被获取的。我的意思是要画哪一行,取决于什么条件。如果表 1 中只有一条记录,那么第一个和最后日期
-
两个表都与 ln_id 结合。如果 detail2 表中有多个记录,我应该从中选择最新记录。如果第一个表中只有 1 条记录,它将返回 null 或相同的记录..