2009-06-29 55 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進行過濾,而不受日期範圍的限制