选择没有值大于X的位置

时间:2014-02-21 16:25:32

标签: sql

我目前正在运行此查询:

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日期。

基本上我正在寻找不再使用的旧表格。

2 个答案:

答案 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