我在查詢2016年1月1日至2016年12月31日期間入院的患者的結果集,他死了。SQL子查詢根據兩個日期之間的差異計算記錄數
作爲結果集的一部分,我需要包括一個專欄(「先前錄取次數」),該專欄可以顯示患者在最後入院日期之前的12個月內的所有預先錄取。
因此,如果患者於2016年6月1日入院並死亡,並且在2015年7月1日和2015年9月30日之前有2次入院,則此列中的總數爲「2」。
因此,邏輯必須是:如果患者在xx/xx/xxxx日期被錄取並死亡,請計算入住日期與xx/xx/xxxx在365天內的同一患者的先前錄取人數。
我試着這樣做的以下子查詢,但得到的2個問題:
1)查詢似乎計數表中的所有記錄招生,而不僅僅是那些與患者個體。 2)結果排除了只有出席者是他們最後一個(即他們沒有在前出席)的任何患者。如果他們之前沒有出席,我希望0出現在列中。
請任何人都可以建議正確的方法/語法?
這是子查詢我已經嘗試:
SELECT DISTINCT
EP.Patient_Id
,EP.Admission_Date 'Final Admission Date'
,(
SELECT COUNT(*)
FROM Inpatients.vw_IP_Episodes IP
WHERE DATEDIFF(day,IP.Admission_Date,EP.Admission_Date) < '365'
AND IP.Discharge_Method != 'Patient died'
)
AS 'No of Prior Admissions'
FROM Inpatients.vw_IP_Episodes EP
WHERE EP.Admission_Date BETWEEN '01/01/2016' AND '31/12/2016'
AND EP.Discharge_Method = 'Patient died'
GROUP BY EP.Patient_Id, EP.Admission_Date
我覺得你的子查詢應該還要篩選IP.Patient_Id = EP.Patient_Id - 應該解決您的問題1#。 – Anssssss
您可能還會考慮重寫WHERE語句以使用適當的SARG進行日期過濾。 IP.Admission_Date> = DATEADD(天,-365,EP.Admission_Date)。這將有助於優化器在Admission_Date中選擇正確的索引。最後,如果出院日期和死亡的入院日期不一致,如果您的死亡日期是您的擔憂,您可能會轉爲EP的出院日期,那麼更多的商業相關信息。 –
謝謝@Assssss。實際上,這解決了這兩個問題,但它給了我更多的問題。返回的結果是使一些計數加倍。我已經修改了子查詢SELECT到不同主鍵'SELECT COUNT(DISTINCT IP.Inpatient_Episode_Primary_Key)',但這沒什麼區別。 – Jon295087