2013-10-31 31 views
1

啊邏輯在煎炸我的大腦!關於上次運行日期的複雜查詢

我有一個Archive表,它記錄運行某個任務時的RunDate。看起來像這樣,但有很多記錄具有相同的TaskID和不同的運行日期。

enter image description here

我需要查詢此表來尋找那些還沒有這個月已經運行的任務。

這是多遠我有:

SELECT * 
FROM (SELECT DISTINCT TaskID FROM tbl_Archive WHERE RunDate <= DateSerial(Year(Now), Month(Now), 1)) AS sub INNER JOIN tbl_Task ON sub.TaskID = tbl_Task.TaskID 
WHERE (((tbl_Task.Frequency)="Monthly")); 

(我選擇不同,因爲我只想顯示任務一次)

這就提出了任務的存檔記錄中的避風港」本月運行,但問題是,它沒有考慮到這項任務是否在本月運行。

所以不知何故,我需要說如果有本月的日期排除記錄。

我希望有人能澄清這個簡單而又難以解決的問題。

感謝

回答

0

您可以使用NOT IN語句來排除已經運行在本月

SELECT * 
FROM (SELECT DISTINCT TaskID FROM tbl_Archive 
WHERE RunDate <= DateSerial(Year(Now), Month(Now), 1) 
AND TaskID NOT IN 
(SELECT TaskID FROM tbl_Archive WHERE RunDate > DateSerial(Year(Now), Month(Now), 1)) 
) 
AS sub INNER JOIN tbl_Task ON sub.TaskID = tbl_Task.TaskID 
WHERE (((tbl_Task.Frequency)="Monthly")); 
+0

完美的ID,曾魅力。我知道Not In函數,但由於某種原因,它只是沒有點擊我的腦海。現在可以充分理解了。謝謝。 – JakkyD