啊,逻辑正在煎炸我的大脑!
我有一个Archive表,用于记录运行某个任务时的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,因为我只想显示一次任务)
这会显示本月没有运行的任务的存档记录,但问题是,它没有考虑该任务是否已在本月运行。
所以我不得不说如果有这个月的日期就排除记录。
我希望有人能澄清这个简单但又如此困难的问题。
由于
答案 0 :(得分: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"));