以下查询几乎适用于所有方面,但它会返回遇到的总数(pe.enc_id)。我试图在2016年找到总访问量。
select distinct p.person_nbr, p.last_name, p.first_name, p.race, count(pe.enc_id) as count_of_encounters
from patient_encounter pe
inner join person p on pe.person_id = p.person_id
inner join patient_diagnosis pd on pd.enc_id = pe.enc_id
WHERE (p.date_of_birth between '19420101' and '19981231' and pe.enc_timestamp >= '20160101' AND pe.enc_timestamp < '20170101')
and pd.person_id in (select distinct p.person_id from person p inner join patient_diagnosis pd on p.person_id = pd.person_id
where (pd.diagnosis_code_id like '250%' or pd.diagnosis_code_id like '648.0%'
or pd.diagnosis_code_id like '357.2' or pd.diagnosis_code_id like '362.0[0-7]' or pd.diagnosis_code_id like '366.41' or pd.diagnosis_code_id like 'E1[0-3].%'
or pd.diagnosis_code_id like 'O24.[0-4]0%' or pd.diagnosis_code_id like 'O24.[4-9][2-9]') )
group by p.person_nbr, p.last_name, p.first_name, p.race
having count(pe.enc_id) >= 2
答案 0 :(得分:2)
您的查询确实看起来是在日期过滤。我有一些建议:
select distinct
您似乎正在寻找具有特定诊断的患者,然后计算诊断数量。您可以通过扩展having
子句在外部聚合中完成所有操作:
所以:
select p.person_nbr, p.last_name, p.first_name, p.race,
count(pe.enc_id) as count_of_encounters
from patient_encounter pe inner join
person p
on pe.person_id = p.person_id inner join
patient_diagnosis pd
on pd.enc_id = pe.enc_id
where p.date_of_birth between '19420101' and '19981231' and
pe.enc_timestamp >= '20160101' AND pe.enc_timestamp < '20170101')
group by p.person_nbr, p.last_name, p.first_name, p.race
having count(pe.enc_id) >= 2 and
sum(case when pd.diagnosis_code_id like '250%' or pd.diagnosis_code_id like '648.0%'
or pd.diagnosis_code_id like '357.2' or pd.diagnosis_code_id like '362.0[0-7]' or pd.diagnosis_code_id like '366.41' or pd.diagnosis_code_id like 'E1[0-3].%'
or pd.diagnosis_code_id like 'O24.[0-4]0%' or pd.diagnosis_code_id like 'O24.[4-9][2-9]' then 1 else 0 end) > 0;