2009-06-29 56 views
0

我有一个日期范围限制的查询记录:扩展SQL查询,以包括超出给定日期

select * from mytable 
where COMPLETIONDATE >= TO_DATE('29/06/08','DD/MM/YY')  
and COMPLETIONDATE <= TO_DATE('29/06/09','DD/MM/YY')  

该表是一个日志的一票系统的活动。内容可能是这样的:

ticket_id|activity|completiondate 
1 1  some 
1 2  some 
1 3  some 
1 4  some 

2 1  some 
2 2  some 
2 3  some 
2 4  some 

这样我知道每个活动何时完成。

我的问题是,如果第一个活动的completiondate发生的时间范围 “之前” 我损失信息:

其中completiondate> = 09年7月1日和completiondate < = 09年7月30日

ticket_id |activity|completiondate 
123 3  1 jul 09 
123 4  2 jul 09 

在这种情况下,我失去了发生在6月30日或之前的活动1和2的日期。

我该如何在限制要显示的项目的日期范围的同时,还包含超出日期范围的相同门票的日期?

这是一个票报告,所以我必须看到:

Tickets from jun 1 - 30 : 

Page won't load, received: march 20, fixed: jun 15 
Change color, received: jun 5, fixed: in progress... 

+0

因此,您希望日期范围内的所有条目与日期范围内的某个条目相关联吗?那么,是什么使该协会?例如,ID列是一个Ticket ID? – 2009-06-29 18:05:43

回答

3

你将需要写一个子查询获取有一个完成日期内的所有ID您的范围,然后将其插入到返回这些ID的所有故障单信息的查询中。

select * 
from mytable 
where id in (select id from mytable where 
       COMPLETIONDATE >= TO_DATE('29/06/08','DD/MM/YY')  
       COMPLETIONDATE <= TO_DATE('29/06/09','DD/MM/YY') 
) 
1

所以,你要对发生在此期间至少一个活动的所有记录:

SELECT * 
    FROM mytable 
    WHERE id IN (
     SELECT id 
     FROM mystable 
     WHERE COMPLETIONDATE BETWEEN ... AND ...); 
0

使用子查询得到票ID列表显示,通过日期范围过滤子选择,那么外部查询将按照子选择符返回的票证ID进行过滤,而不受日期范围的限制