0

我需要对在给定时间范围内出院的患者进行有效计数,但这是诀窍。在此表中,患者可以多次出现,我们的系统使用基于情节的系统。

就像在(图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 = 'I'。关于如何做到这一点的任何想法?

提前致谢。

4

1 回答 1

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;

您也可以将其与您的逻辑一起使用,但我不确定查询中的状态和日期之间的相互作用。

于 2013-08-05T15:46:24.980 回答