我在查询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