2012-08-06 80 views
0

内的所有DATEDIFFs我有一个像enter image description here查找特定时间范围

一张桌子的patientid, admissiondate, dischargedate复合键。

请注意,patientID 6有10/21的dischargedate和10/22的admissiondate

另外patientID 11具有2/20的dischargedate和6/14的admissiondate

patientID可以在数据库中的次数没有限制。

如何获得所有admissiondate比前面的dischargedate大3天或更少的天数的列表? (patientid 6符合此法案)。它不能正确地自我加入多次。我有

select patientid, p.admissiondate, p.dischargedate 
    from Patient as p 
    where patientid in 
    (
     select patientid 
      from Patient p2 
      group by patientid 
      having count(*) > 1 
    ) 
    order by patientid, admissiondate 

获取所有人多次看到的列表。我如何确定admissionDatedischargedate之后的三天内? (从本例中的前一行开始)。

我不能做一个简单的datediff(dd,admissiondate, dischargedate)因为我不担心datediff上的任何一个访问,只是,在未来admissiondate内以前dischargedate

回答

4
;with cte as 
(
    -- get admission dates by patient in order 
select *, ROW_NUMBER() over (partition by PatientID order by AdmissionDate) as AdOrd 
from patient 
) 
    -- find the gaps between adjacent admissions 
    select admissions.patientid, discharges.dischargedate, admissions.admissiondate  
    from cte admissions 
     inner join cte discharges on discharges.patientid=admissions.patientid 
      and discharges.AdOrd = admissions.AdOrd-1 
    where DATEDIFF(D,discharges.dischargedate,admissions.admissiondate)<=3 
+0

这看起来像它的工作原理三天来一次。你能解释一下吗?和c2.AdOrd = c1.AdOrd-1'。 -1提供了什么? – wootscootinboogie 2012-08-06 15:35:22

+3

既然'AdOrd'是基于你的'AdmissionDate'的顺序,这个条件满足你的要求,你只想比较'...以前的dischargeate' – 2012-08-06 15:41:28

+0

我不完全理解加入上一行数与平等的入场。 – wootscootinboogie 2012-08-06 15:45:16