0

我有一张像在此处输入图像描述

具有 的复合键patientid, admissiondate, dischargedate

请注意,它patientID 6具有dischargedate10/21 和admissiondate10/22 的 a。

patientID 11有一个dischargedate2/20 和一个admissiondate6/14。

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

如何获得所有实例的列表,其中 anadmissiondate比前一个多 3 天或更少天dischargedate?(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

获取不止一次见过的所有人的列表。我怎样才能确保admissionDate在三天后dischargedate?(来自本示例中的上一行)。

我不能做一个简单的datediff(dd,admissiondate, dischargedate),因为我不担心datediff任何一次访问,只是 NEXTadmissiondate在前一次的三天内到来dischargedate

4

1 回答 1

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
于 2012-08-06T15:18:12.367 回答