2017-05-25 50 views
0

我們需要了解患者在第一次住院後30天內重新入住的人數(以及是誰)。有多少患者在第一次住院後的30天內重新入院

表(非常簡化):patientID(int),DateInToHospital(datetime),DateOutOfHospital(Datetime)。

因此,我們需要所有的病人,其中DateInToHospital(第二支柱)< = DateOutOfHospital(第一支柱)起30天

(我們使用的MS SQL Server 2008 R2)

+1

您能否提供樣本數據? – Jake

+0

這個數據很困難;我有幾次住宿的病人。 有些住宿在上次住宿結束的同一時間開始,所以它不是一個真正的新住宿。 到目前爲止喬爾的第二個解決方案與CROSS APPLY似乎給出了最正確的答案 –

回答

0

這應該工作:

WITH FirstAdmit AS (
    SELECT patientID, MIN(DateInToHospital) FirstStayStart 
    FROM [Table] 
), 
FirstDischarge AS (
    SELECT t.patientID, DateOutOfHospital, FirstStayStart 
    FROM FirstAdmit a 
    INNER JOIN [Table] t ON t.patientID = a.patientID AND t.DateInToHospital = a.FirstStayStart 
) 
SELECT t.* 
FROM [Table] t 
INNER JOIN FirstDischarge d on t.patientID = d.patientID 
    AND t.DateInToHospital <= DATEADD(d, 30, d.DateOutOfHospital) 
    AND t.DateInToHospital <> FirstStayStart 

而這裏的使用APPLY一個版本,可能會更快一點:

SELECT t.* 
FROM [Table] t 
CROSS APPLY (
    SELECT TOP 1 DateInToHospital, DateOutOfHospital FROM [Table] m WHERE m.patientID = t.patientID ORDER BY DateInToHospital 
) FirstStay 
WHERE t.DateInToHospital <= DATEADD(d, 30, FirstStay.DateOutOfHospital) 
    AND t.DateInToHospital <> FirstStay.DateInToHospital 
+0

兩者都似乎工作(在解決方案1中的第三行後添加GROUP BY patientID) 必須重新檢查,然後再結束 –

1

這將返回一個病人誰被重新承認任何准入的30天內的早期坦言:

select * 
from p 
where exists (/* re-admit within 30 days */ 
    select 1 
    from p i 
    where i.PatientId = p.PatientId 
    and i.AdmitDate > p.DischargeDate 
    and i.AdmitDate <= dateadd(day,30,p.DischargeDate) 
    ) 

這將返回一個病人誰是再次入院,從他們的第一個30天之內的初始准入導納:

select * 
from p 
where exists (/* re-admit within 30 days */ 
    select 1 
    from p i 
    where i.PatientId = p.PatientId 
     and i.AdmitDate > p.DischargeDate 
     and i.AdmitDate <= dateadd(day,30,p.DischargeDate) 
    ) 
    and not exists (/* only for the first admittance */ 
    select 1 
    from p i 
    where i.PatientId = p.PatientId 
     and i.AdmitDate < p.AdmitDate 
    ) 
+0

對不起,我得到兩個患者重新入住> 30天,但在第二次入住後30天內重新入住。 –

+0

@FredMortenSolbakken編輯爲包含'not exists()'子句以僅獲得第一個准入。 – SqlZim