我目前正在运行此查询:
SELECT DISTINCT f.FormName
FROM PatientTask as pt
INNER JOIN ClinicTask ct
ON pt.fTaskKey = ct.fTaskKey
INNER JOIN Form f
ON ct.fFormKey = f.FormKey
WHERE pt.TaskTargetDate <= CONVERT(datetime, '2012-01-01');
现在,显然这只会返回FormName
,其TaskTargetDate
早于2012年1月1日。我要做的是找到FormName
做的事情没有过去2年内存在的TaskTargetDate
。因此,如果在2010年,2011年和2013年有一个带有TaskTargetDate
的表单,则应该从查询返回中完全排除该日期,因为2013日期。
基本上我正在寻找不再使用的旧表格。
答案 0 :(得分:2)
NOT IN
应该会给你这些结果:
Select DISTINCT f.FormName
FROM Form f
WHERE f.FormKey NOT IN
(
SELECT ct.fFormKey
From PatientTask as pt
Inner Join ClinicTask ct on pt.fTaskKey = ct.fTaskKey
WHERE pt.TaskTargetDate >= CONVERT(datetime, '2012-01-01')
)
此外,CONVERT
不是必需的 - SQL会自动将'2012-01-01'
解析为日期,因为它与日期值进行比较
答案 1 :(得分:1)
您可以使用左外连接:
Select
DISTINCT f.FormName, pt.fTaskKey
From
Form f left outer join ClinicTask ct
on ct.fFormKey = f.FormKey
Inner Join
(
select fTaskKey
from PatientTask
WHERE pt.TaskTargetDate >= CONVERT(datetime, '2012-01-01')
) pt
on pt.fTaskKey = ct.fTaskKey
where ct.fFormKey is null