以下是包含数据的业务场景: 有一所医院有几个房间,患者正在入院和出院。系统会要求您生成一份报告,该报告每天显示'累积'逗留时长。
来源表(访问)
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
感谢您提前投入。
答案 0 :(得分:1)
我觉得这与你的previous post非常相似,虽然这不是你想要的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获得逗留时间。
祝你好运。