当前位置: 代码迷 >> Oracle开发 >> 求计算病院住院期初人数的sql
  详细解决方案

求计算病院住院期初人数的sql

热度:78   发布时间:2016-04-24 06:30:25.0
求计算医院住院期初人数的sql
表结构如下
with tab1 as(
select 1 id,'O' state,to_date('2014-9-1','yyyy-MM-dd') in_date,to_date('2014-11-1','yyyy-MM-dd') out_date from dual
union all select 2,'O' state,to_date('2014-9-3','yyyy-MM-dd'),to_date('2014-10-23','yyyy-MM-dd') from dual
union all select 3,'O' state,to_date('2014-11-1','yyyy-MM-dd') ,to_date('2014-11-26','yyyy-MM-dd') from dual
union all select 4,'I' state, to_date('2014-8-1','yyyy-MM-dd'),to_date('0001-1-1','yyyy-MM-dd') from dual
union all select 5,'I' state, to_date('2014-8-1','yyyy-MM-dd'),to_date('0002-1-1','yyyy-MM-dd') from dual
union all select 6,'O' state, to_date('2014-10-1','yyyy-MM-dd'),to_date('2014-10-28','yyyy-MM-dd') from dual
)
select * from tab1

注:
1.状态为 I 表示患者还未出院。
2.因为患者最早入院时9月1日,所以9月的期初为0.

期望的结果:
year_month    count
201408          0
201409          2
201410          4
201411          3

大神帮帮忙,这类的sql没写过。
------解决思路----------------------
with tab1 as(
select 1 id,'O' state,to_date('2014-9-1','yyyy-MM-dd') in_date,to_date('2014-11-1','yyyy-MM-dd') out_date from dual
union all select 2,'O' state,to_date('2014-9-3','yyyy-MM-dd'),to_date('2014-10-23','yyyy-MM-dd') from dual
union all select 3,'O' state,to_date('2014-11-1','yyyy-MM-dd') ,to_date('2014-11-26','yyyy-MM-dd') from dual
union all select 4,'I' state, to_date('2014-8-1','yyyy-MM-dd'),to_date('0001-1-1','yyyy-MM-dd') from dual
union all select 5,'I' state, to_date('2014-8-1','yyyy-MM-dd'),to_date('0002-1-1','yyyy-MM-dd') from dual
union all select 6,'O' state, to_date('2014-10-1','yyyy-MM-dd'),to_date('2014-10-28','yyyy-MM-dd') from dual
),

ym as(
select add_months(to_date('201408','YYYYMM'),rownum-1) month_ from dual connect by rownum<=4)
select to_char(ym.month_, 'YYYYMM') month_, count(t.id)
  from tab1 t
 right join ym
    on t.in_date < trunc(ym.month_, 'MM')
   and (t.out_date >= trunc(ym.month_, 'MM') or
       t.state = 'I' and sysdate >= trunc(ym.month_, 'MM'))
 group by ym.month_
 order by ym.month_
  相关解决方案