首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于查找日期范围内访问次数的SQL查询

用于查找日期范围内访问次数的SQL查询
EN

Stack Overflow用户
提问于 2016-03-05 08:31:13
回答 1查看 222关注 0票数 0

下面的查询在几乎所有方面都有效,除了它返回遇到的总计数(pe.enc_id)。我在试着找出2016年的访问总数。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2016-03-05 08:37:14

您的查询看起来确实像是在按日期进行过滤。我确实有一些建议:

你不需要select distinct

  • Your子查询是complicated.

  • In
  • 的事实,我不认为这是必要的。

您似乎在寻找具有特定诊断的患者,然后计算诊断的数量。通过扩展having子句,您可以在外部聚合中完成所有这些操作:

所以:

代码语言:javascript
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35808507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档