根据患者的入院日期和出院日期计算医院每个月的在院人数和住院天数
数据库表结构:
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'))