我需要一個 SQL 查詢,它將根據時間可用性回傳可用的醫生。
StartTime, EndTime TIME(0) - 資料型別
INSERT INTO Schedule(PatientId, DoctorId, DayOfWeek,StartTime,EndTime)
(1,100,'Sunday','8:00 AM','11:00 AM')
INSERT INTO Schedule(PatientId, DoctorId, DayOfWeek,StartTime,EndTime)
(1,101,'Monday','12:00 PM','03:00 PM')
INSERT INTO Schedule(PatientId, DoctorId, DayOfWeek,StartTime,EndTime)
(2,100,'Sunday','5:00 PM','7:00 PM')
INSERT INTO Schedule(PatientId, DoctorId, DayOfWeek,StartTime,EndTime)
(2,101,'Friday','4:00 PM','6:00 PM')
在給定的表中,我們可以存盤患者和醫生之間的時間表。我需要一個 SQL 查詢,該查詢將回傳 DoctorId。而且每周,醫生總共可以有 40 小時(8 小時/5 天)。所以如果我傳遞一個引數,我需要在 40 小時內有 >= 50% 可用時間的醫生。
示例:如果我想獲得 DoctorId (100),他可能會在周日(2 小時)和周一(2 小時)忙于處理任何患者。但他的 36 小時仍然可用一周。SQL 將回傳 DoctorId (100)
uj5u.com熱心網友回復:
如果您選擇,DATEDIFF(second, StartTime, EndTime)您將獲得計劃條目涵蓋的秒數。
因此,如果您將醫生所有行的值相加,您就可以看到他們總共忙了多少秒。
然后,如果您想看有超過 50% 空閑時間的醫生,您只需尋找預約時間少于 20 小時的醫生(其中20 hrs== 20 * 60 * 60 seconds) ...
SELECT
DoctorId,
SUM(DATEDIFF(second, StartTime, EndTime)) / (60.0 * 60.0) AS hrs_busy
FROM
Schedule
GROUP BY
DoctorId
HAVING
SUM(DATEDIFF(second, StartTime, EndTime)) <= (20 * 60 * 60)
演示:https : //dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=5bd2fc110d7039acadcb280323df9d77
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/329764.html
標籤:sql-server 查询语句
上一篇:主查詢列中的SQL查詢子表
