谜题3 麻醉师谜题

这本书我觉得实在太。。。创新了。。。每看一章我心灵受到打击。。。妈呀。。。果然学了半学期数据库,看这种书还是吃力。

描述:麻醉师为手术中的病人实施麻醉。麻醉师的实施麻醉的时间有重叠,规定start_time,end_time,name,proc_id.

//创建一个视图,里面包含了规定一个proc_id,comparsion_id是指proc_id 相关联的一个手术id,如果是开始时间,则+1,如果是结束时间,则-1. ---------------------------------------------------------------------------------------- CREATE VIEW Event (proc_id, comparison_proc, anest_name, event_time, event_type) as( SELECT P1.proc_id,P2.proc_id,P1.anest_name,P2.start_time,1 FROM Procs as P1,Procs as P2 WHERE P1.anest_name=P2.anest_name AND NOT(P1.start_time>=P2.end_time OR P2.start_time>=P1.end_time) UNION SELECT P1.proc_id,P2.proc_id,P1.anest_name,P2.end_time,-1 FROM Procs as P1,Procs as P2 WHERE P1.anest_name=P2.anest_name AND Not (P1.start_time>=P2.end_time OR P2.start_time>=P1.end_time) );//计算每个时间总共有几个PROC在进行,即如果要求一个时间的手术数量,只要把先前的event_type累加即可。因为开始就+1,结束就-1,所以很简单。 create view ConcurrentProcs as select E1.proc_id,E1.event_time, ( select SUM(E2.event_type) from Event AS E2 where E2.event_time<E1.event_time AND E2.proc_id=E1.proc_id ) as instantaneous_count from Event as E1 //没用order by的原因是SQL Server的视图中貌似不能用order by...囧...

select proc_id,MAX(instantaneous_count) from ConcurrentProcs group by proc_id;

后面的解答过于思路不清晰。。

我自己根据他的第一个解答的思路产生了一个想法。

其实他的思想就是把开始时间和结束时间统一放在一起进行排序,如果是开始时间则+1,如果是结束时间就-1.即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值