当前位置: 代码迷 >> Oracle开发 >> 求按月计算住院天数的有关问题
  详细解决方案

求按月计算住院天数的有关问题

热度:114   发布时间:2016-04-24 06:33:39.0
求按月计算住院天数的问题。
根据患者的入院日期和出院日期计算医院每个月的在院人数和住院天数
数据库表结构:
id     in_date    out_date

有没有大神帮帮忙
------解决思路----------------------
with T1 AS (
SELECT MIN(IN_DATE) MINDATE,MAX(OUT_DATE) MAXDATE FROM T CONNECT BY 
),T2 AS (
SELECT TO_CHAR(ADD_MONTHS(MINDATE,ROWNUM-1),'YYYYMM') M
FROM T1 CONNECT BY TO_CHAR(ADD_MONTHS(MINDATE,ROWNUM-1),'YYYYMM')<=TO_CHAR(MAXDATE,'YYYYMM')
)
SELECT T2.M as 月份,COUNT(T1.ID) as 人数,
SUM(LEAST(LAST_DAY(TO_DATE(T2.M
------解决思路----------------------
'01','YYYYMMDD')),TRUNC(T.OUT_DATE))-
GREATEST(TO_DATE(T2.M
------解决思路----------------------
'01','YYYYMMDD'),TRUNC(T.IN_DATE))+1)  as 人天
FROM T RIGHT JOIN T2
ON T.OUT_DATE>=TO_DATE(T2.M
------解决思路----------------------
'01','YYYYMMDD')
AND T.IN_DATE<ADD_MONTHS(TO_DATE(T2.M
------解决思路----------------------
'01','YYYYMMDD') ,1)

------解决思路----------------------
这就属于你前面没说,突然冒出来的东西
前面写的是假设还没出院的话,出院时间是空的。如果是0001年1月1日,相应的条件和天数计算的地方需要调整下
least后面的t.out_date要换成 decode(to_char(t.out_date,'YYYY-MM-DD'),'0001-01-01',sysdate,t.out_date)
条件换成
where t.in_date < add_months(to_date(month_ 
------解决思路----------------------
 '-01', 'YYYY-MM-DD'), 1)
   and (t.out_date > to_date(month_ 
------解决思路----------------------
 '-01', 'YYYY-MM-DD') or
       t.out_date<date'0001-1-1'+1 and
       sysdate > to_date(month_ 
------解决思路----------------------
 '-01', 'YYYY-MM-DD'))
  相关解决方案