我需要积极计算在给定时间范围内出院的患者,但这是诀窍。在此表中,患者可以出现不止一次,我们的系统使用基于情节的系统。
喜欢(图1)。
select
p.patient_id,
p.episode_id,
p.case_status,
p.case_substatus,
p.episode_close_date
from patient p
我不需要患者出现在这两个查询中。
select * from patient p
where p.case_status = 'a'
-
select * from patient p
where (p.episode_close_date between '2013-01-01 00:00:00.000' and '2013-06-01 00:00:00.000') and p.case_status = 'i'
我想,最好的方法是,最高的p.episode_id ='我'。关于如何做到这一点的任何想法?
提前致谢。
答案 0 :(得分:1)
您可以使用聚合和having
子句执行此操作。 having
子句计算与每个条件匹配的行数 - 并且您希望将值设置为0
,因为您希望两者都不返回任何行:
select patient_id
from patient p
group by patient_id
having sum(case when p.case_status = 'a' then 1 else 0 end) = 0 and
sum(case when (p.episode_close_date between '2013-01-01 00:00:00.000' and '2013-06-01 00:00:00.000') and
p.case_status = 'i'
then 1 else 0
end) = 0;
基本上,前两个查询中的逻辑移入having
的单独子句中,以计算与每个条件匹配的行。
编辑:
以下是您如何查看每位患者的最后一集:
select p.*
from (select p.*,
max(episode_id) over (partition by patient_id) as maxei
from patients p
) p
where episode_id = maxei;
您也可以将此与逻辑一起使用,但我不确定状态与查询中的日期之间的相互作用。