复杂的Sql查询帮助。在SQL中形成查询

时间:2009-10-14 13:15:32

标签: sql sql-server

我是SQL新手,需要编写复杂的查询。你能帮忙吗?

我有两张桌子。一个称为PATIENTS,另一个称为CASES。患者有“患者编号”并输入日期。 CASES有“患者编号”,“病例编号”。和“修改日期”。这两个表与“患者编号”相关联。有多个“案例号”。与一个“患者编号”相关联,因为一个患者可能有多个病例。

我需要获得以下记录。所有患者(来自PATIENTS)的所有“病例修改日期”都比某个日期更早。因此,如果日期是1999年6月20日。那么我需要所有患者,他们在06-20-1999之后没有病例被修改

我将不胜感激任何帮助。谢谢。

3 个答案:

答案 0 :(得分:11)

SELECT
    *
FROM
    Patients
WHERE
    PatientId NOT IN(
        SELECT
            PatientId
        FROM
            Cases
        WHERE
            DateModified >= '06-20-1999'
    )

答案 1 :(得分:1)

SELECT patient_no
FROM patients
WHERE patient_no NOT IN (
  SELECT patient_no
  FROM cases
  WHERE date_modified >= '1999-06-20'
)

不确定该日期格式。

答案 2 :(得分:0)

如果您需要的只是患者,并且所有病例都必须在日期之前进行修改,那么

Select * From Patients p
Where Exists      -- eliminates those with no cases/or no cases before date
    (Select * From cases 
     Where PatientNo = p.PatientNo
        And ModifiedDate < [DateValue])
  And Not Exists --  to eliminate patients with cases modified after date.. 
    (Select * From cases 
     Where PatientNo = p.PatientNo
        And ModifiedDate >= [DateValue])

如果您还需要案例数据,请使用联接:

Select * From Patients p 
   Join Cases c on c.PatietNo = p.PatientNo 
Where c.Modifed < DateValue

编辑:从@ Larry的评论下面改变之前的评论,thx!