扩展SQL查询以包括超出给定日期的记录

时间:2009-06-29 18:01:07

标签: 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发生在“日期范围之前”我丢失该信息:

其中,完成日期&gt; = 1月19日和完成日期&lt; = 30年​​7月

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

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

我如何同时限制我想要展示的项目的日期范围,还包括超出日期范围的相同门票的日期?

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

Tickets from jun 1 - 30 : 

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

等。

3 个答案:

答案 0 :(得分: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 :(得分:1)

所以你想要在这段时间里至少发生过一次活动的所有记录:

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

答案 2 :(得分:0)

使用子选择获取要显示的故障单ID列表,按日期范围过滤子选择,然后外部查询将按子选择返回的故障单ID而不是日期范围

进行过滤