如何计算小时之间的总_数-MySQL
我有一个类似Mysql的表如何计算小时之间的总_数-MySQL,mysql,sql,Mysql,Sql,我有一个类似Mysql的表 |Doctor_id | login_hour | logout_hour | ------- ----------- ----------- 12 10 12 13 11 13 14 09 13 15 13 14 我想知道每小时安排多少医生。如果医生的日程安排在11点到13点之间,他应该在11点到12点出现。请告诉我
|Doctor_id | login_hour | logout_hour |
------- ----------- -----------
12 10 12
13 11 13
14 09 13
15 13 14
我想知道每小时安排多少医生。如果医生的日程安排在11点到13点之间,他应该在11点到12点出现。请告诉我怎么做
输出应该是
Hour | Number_of_doctors
---- -----------------
10 2
11 3
12 2
13 1
您可以使用内部选择,例如:
这是我的建议
更新
这将假设至少有一名医生登录,正如草莓所说的那样。如果您需要在任何给定时间登录的医生总数,则可以使用以下查询:
SELECT COUNT(*)
FROM doctors WHERE login_hour <= ? AND logout_hour > ?;
这里有一个想法——但正如在评论中所说的,我实际上会在应用程序代码中处理大部分内容
SELECT x.hour
, COUNT(*) total
FROM
( SELECT 9 hour UNION
SELECT 10 UNION
SELECT 11 UNION
SELECT 12 UNION
SELECT 13 UNION
SELECT 14
) x
JOIN my_table y
ON x.hour >= y.login_hour
AND x.hour < y.logout_hour
GROUP
BY hour;
考虑在应用程序代码中处理显示问题。此外,您的数字不相加。如果13等于1,那么12必须等于2。@草莓:对不起。是的,12应该是2。我正在更改它。这假设在任何给定时间至少有一名医生登录。@Darshan:查询输出似乎不正确。@草莓:我想知道每小时安排了多少名专家。@Pravenreddy请参阅上面的评论。此外,除结果为0或NULL外,我倾向于认为如果答案与所需输出不匹配,那么它可能是错误的,或者充其量是不完整的。问题是,如果医生在22:00到02:00之间工作:00@OtoShavadze对时间是线性的。格洛丽亚·蒙迪。
SELECT x.hour
, COUNT(*) total
FROM
( SELECT 9 hour UNION
SELECT 10 UNION
SELECT 11 UNION
SELECT 12 UNION
SELECT 13 UNION
SELECT 14
) x
JOIN my_table y
ON x.hour >= y.login_hour
AND x.hour < y.logout_hour
GROUP
BY hour;