我查询了在2016年1月1日至2016年12月31日期间入院的患者结果,并且已经死亡。
作为结果集的一部分,我需要添加一个专栏('预先录取次数'),该列提供患者在截至该日期的12个月内的所有先前录取他们最后的录取。
因此,如果患者于2016年6月1日入院并去世,并且在2015年7月1日和2015年9月30日有2次入院,那么总数将是' 2'在这一栏中。
因此逻辑必须是:如果患者在xx / xx / xxxx日期入院并死亡,则计算入院日期在xx / xx / xxxx的365天内的同一患者的先前入院次数。 / p>
我尝试将此作为以下子查询,但得到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
答案 0 :(得分:0)
感谢与他人的讨论,以下是解决方案:
SELECT DISTINCT
EP.Patient_Id
,EP.Admission_Date 'Final Admission Date'
,(
SELECT COUNT(DISTINCT IP.Admission_Date)
FROM Inpatients.vw_IP_Episodes IP
WHERE IP.Admission_Date >= DATEADD(day, -365, EP.Admission_Date)
AND IP.Patient_Id = EP.Patient_Id
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
答案 1 :(得分:-1)
CTE可能是最好的删除重复项。
;WITH cte AS(SELECT EP.Patient_Id
,EP.Admission_Date 'Final Admission Date'
, ROW_NUMBER() OVER (PARTITION BY EP.Patient_Id ORDER BY EP.Admission_Date DESC) AS Rownum
, (SELECT COUNT(*) AS [No of Prior Admissions]
FROM Inpatients.vw_IP_Episodes IP
WHERE Admission_Date >= DATEADD(day, -365, EP.Admission_Date)
AND Admission_Date < EP.Admission_Date
AND IP.Patient_Id = EP.Patient_Id
) [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'
)
SELECT *
FROM cte
WHERE Rownum = 1;