问题描述
我有 3 个表,其中包含时间段、医生的预约时间表和患者的预约请求。 我想编写一个查询来查找每个时间段可用的医生数量以及每个时间段内的预约请求数量。
插槽(10 分钟间隔)
Slot_id | 插槽 |
---|---|
1 | 2021-01-01 09:00 |
2 | 2021-01-01 09:10 |
3 | 2021-01-01 09:20 |
booked_gp_slots(医生预约的时间段)
gp_id | booked_slot_start | booked_slot_end |
---|---|---|
10 | 2021-01-01 09:00 | 2021-01-01 10:00 |
10 | 2021-01-01 12:00 | 2021-01-01 12:20 |
24 | 2021-01-01 09:00 | 2021-01-01 09:40 |
request_slots(患者预约请求)
patient_id | req_slot_start | req_slot_end |
---|---|---|
1 | 2021-01-01 09:00 | 2021-01-01 09:30 |
3 | 2021-01-01 10:00 | 2021-01-01 10:30 |
5 | 2021-01-01 09:00 | 2021-01-01 09:40 |
样本输出
Slot_id | 插槽 | GP 可用 | 患者请求 |
---|---|---|---|
1 | 2021-01-01 09:00 | 2 | 5 |
2 | 2021-01-01 09:10 | 1 | 6 |
3 | 2021-01-01 09:20 | 3 | 6 |
由于没有连接表的 ID,我发现很难统计可用医生和预约的数量。我的逻辑是检查医生预定的时段开始时间是否 > 时段时间,如果是这样的话,将它们加起来。我无法汇总来自 CTE 的列。
任何建议或帮助将不胜感激。
with gp_slot as(SELECT
gp_id,booked_slot_start,booked_slot_end
FROM
booked_gp_slots
)
Select
SUM(CASE WHEN
(SELECT gp_slot.booked_slot_start FROM gp_slot) > S.Slots THEN 1 ELSE 0 END) AS GP_availibily
FROM Slots
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)