我有一个像这样的结果集(我必须执行一个查询才能从合约表中获取它):
OBJECT_ID START_DT END_DT
1 01/01/2011 12/31/2011
2 08/08/2008 09/30/2013
3 10/01/2008 10/31/2013
..
..
指定某些对象在合同上处于活动状态的日期。
我还有另一张桌子(称之为OBJ_EVENTS
),如下所示:
OBJECT_ID EVENT_DATE EVENT_TYPE
1 10/10/2010 FOO EVENT
1 01/05/2011 BAR EVENT
1 01/01/2012 FOO EVENT
2 08/09/2008 FOO EVENT
4 10/10/2010 BAZ EVENT
该表告诉我某个对象何时做了我可能感兴趣的事情。但是,我只关心合同日期START_DT
和END_DT
之间的事件,用于我的合同结果集中的对象。所以,如果这是我的整个OBJ_EVENTS
表,我想要的结果集如下所示:
OBJECT_ID EVENT_DATE EVENT_TYPE
1 01/05/2011 BAR EVENT --between Obj 1's contract dates 01/01/2011-12/31/2011
2 08/09/2008 FOO EVENT --between Obj 2's contract dates 08/08/2008-09/30/2013
是否可以在一个SQL查询中完成此操作,还是需要执行某种游标?我没有大量的SQL经验。
答案 0 :(得分:2)
您可以使用您正在使用的查询来获取第一个结果集作为子查询,例如:
select oe.OBJECT_ID, oe.EVENT_DATE, oe.EVENT_TYPE
from OBJ_EVENTS oe inner join
( *result set query here*) rs
on oe.OBJECT_ID = rs.OBJECT_ID and
oe.EVENT_DATE between rs.START_DT and rs.END_DT;
这可能不是最好的方式,但它应该完成工作。特别是,如果您的结果集不经常更改,则可能值得在常规表中缓存该查询的结果。无论是否经常更改,如果经常引用结果集,为它创建视图会很有用。