-2

这是一个有数据的业务场景:有一家医院有几个房间,病人在其中住院和出院。您被要求生成一份报告,显示每天的“累积”停留时间。

源表(访问)

Visit#(int)   AdmissionDate(datetime)  DischargeDate(datetime)
1             2012-01-01               2012-01-05
2             2012-01-03               2012-01-06
3             2011-12-29               2012-01-04

要求是返回的数据集为如下结构。你看,逗留的时间随着时间的推移而增加。每条记录显示给定日期的患者人数和累计住院时间(入院日期)。

CalendarDay LenghthOfStay(day) NumberOfPatients
2011-12-29  1                  1
2011-12-30  2                  1
2011-12-31  3                  1
2012-01-01  5                  2
2012-01-02  7                  2
2012-01-03  10                 3
2012-01-04  13                 3
2012-01-05  15                 2
2012-01-06  16                 1

提前感谢您的输入。

4

1 回答 1

1

我觉得这与您之前的帖子非常相似,虽然这不是您想要的 100%,但应该可以帮助您入门:

select 
   CONVERT(char(10), AdmissionDate+v.number, 112)  as CalendarDay,
   ROW_NUMBER() OVER (ORDER BY CONVERT(char(10), AdmissionDate+v.number, 112))  LenghthOfStay,
   COUNT(*) NumberOfPatients
from Visit t
inner join master..spt_values v
  on v.type='P' and v.number <= DATEDIFF(d, AdmissionDate, DischargeDate) 
group by CONVERT(char(10), AdmissionDate+v.number, 112)
order by CONVERT(char(10), AdmissionDate+v.number, 112)

日期正确,患者正确。不确定是否可以使用纯 SQL 获得停留时间。

祝你好运。

于 2013-01-26T04:51:12.577 回答