当且仅当另一个字段具有特定值时,您如何检查查询中的字段是否具有特定值?

How do you check a field in a query for specific values if and only if another field had a specific value?

我想在我的 Access 查询中写一个表达式来检查我们 运行 下周 的项目是否有 运行 4 周 该日期之前。我无法理解如何在同一个查询中检查某些内容,然后使用该检查的 returned 值来检查更多内容。我试过的方法是编写另一个查询,该查询将使用第一个查询的结果(其中 7/20/2015 中的项目被隔离)来检查这些项目的日期,但我 运行 进入问题,因为那时我必须将该查询与原始 table 联系起来,这会重复数据。

用伪代码编写,看起来有点像下面这样:

如果 itemjob_date7/20/2015,请检查该项目在 7/20/2015 之前的所有实例,如果在 [=16] 周内没有实例=]、7/6/20156/29/20156/22/2015,然后 return item

以更直观的方式编写:

item          job_date
A             6/22/2015
A             6/29/2015
A             7/6/2015
A             7/13/2015
A             7/20/2015

item          job_date
B             6/15/2015
B             
B             
B             
B             
B             7/20/2015

item          job_date
C             6/22/2015
C             
C             
C             7/13/2015
C             7/13/2015
C             7/20/2015

item          job_date
D             
D             
D             
D             
D             
D             

项目 A 不会被 returned 因为我们一直在 运行ning 连续。项目 B 会 return,因为即使我们 运行 它是在 6/15/2015 上发布的,那也比 7/20/2015 早了 4 个多星期。 Item D 不会 return 因为它没有包含目标日期 (7/20/2015) 的行。

备注:

下面的查询 return 当我提供 7/20/2015 作为参数值时,此结果集来自您的示例数据:

item
----
B

查询包括一个子查询,其中 returns 那些在目​​标日期之前的 28 天内具有 job_date 值的行的项目。请注意,子查询没有 return 一个 item,它在该范围内没有 job_date 值 --- 所以它给出你只有那些在那个范围内确实有 job_date 的项目。因此,离开加入子查询并仅询问 "right side" 为 Null 的行意味着我们从最终结果集中排除这些项目。

PARAMETERS pTarget DateTime;
SELECT j.item
FROM
    dbo_job AS j
    LEFT JOIN
    (
        SELECT [item]
        FROM dbo_job
        WHERE job_date>=DateAdd('d', -28, [pTarget]) And job_date<[pTarget]
        GROUP BY [item]
    ) AS sub
    ON j.item = sub.item
WHERE j.job_date=[pTarget] AND sub.item Is Null
GROUP BY j.item;