【问题标题】:Cross referencing results from query's来自查询的交叉引用结果
【发布时间】:2013-08-05 15:35:11
【问题描述】:

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

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

提前致谢。

【问题讨论】:

    标签: sql


    【解决方案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;
    

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

    【讨论】:

    • 嘿,戈登,谢谢你的帖子,所以这会上升到任何集数对吗?看来我不能让它显示其他信息。我不能将其添加到其他列中查看吗?
    • 我想这就是我需要的。让我来做这件事,看看我能不能得到我需要的结果。非常感谢您的帮助。
    • 我在我正在处理的另一个查询中使用此代码,但遇到了问题。有什么办法可以谈谈看看吗?非常感谢您提供此代码。自从一年前你把它给我以来,我一直在使用它。 stackoverflow.com/questions/27806899/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    相关资源
    最近更新 更多