我的查询受日期范围的限制:
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...
等。
答案 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而不是日期范围
进行过滤