2014-02-21 118 views
0

我目前正在運行此查詢:選擇在沒有價值大於X

​​

現在,顯然這只是要返回FormName有一個TaskTargetDate比2012年1月1日早些時候我'm試圖做的是發現FormName s沒有TaskTargetDate存在於過去的2年。因此,如果2010年,2011年和2013年有TaskTargetDate的表單,則應該從2013年的日期完全排除查詢回報。

基本上我正在尋找不再使用的舊形式。

回答

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

您可以使用左外連接:

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