1

啊逻辑在煎我的大脑!

我有一个存档表,它记录了某个任务运行时的 RunDate。看起来像这样,但有许多记录具有相同的 TaskID 和不同的运行日期。

在此处输入图像描述

我需要查询此表以查找本月尚未运行的任务。

这是我已经走了多远:

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"));

(我选择 DISTINCT 是因为我只想显示一次任务)

这会显示本月未运行的任务的存档记录,但问题是,它没有考虑该任务是否已在本月运行。

因此,如果有这个月的日期,我需要以某种方式说排除记录。

我希望有人能澄清这个简单但又如此困难的问题。

谢谢

4

1 回答 1

0

您可以使用 NOT IN 语句来排除本月已运行的 id

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"));
于 2013-10-31T14:51:05.623 回答