我需要一个rails / mysql查询来查找那些有给定时间段的诊所
private static void CreateSection(ExcelRange basePosition)
{
var rangeToMerge = basePosition.Offset(0, 0, 5, 1);
rangeToMerge.Merge = true;
}
现在,用户将在2016年1月20日13:00至13:30之间给出一个时间段。
在那个时间段,我需要找到完全持续时间的免费诊所 诊所B的预约时间为13:00至14:00,因此无法使用 诊所A没有预约,所以它会给我这个数据
同样,如果用户选择11:00 - 11:30,他将同时获得A和B
因此,考虑到时间范围,我需要确定哪个诊所(如果有的话)在此期间是免费的
答案 0 :(得分:1)
您应该使用范围重叠逻辑来解决此问题。你可以在这里找到一个很好的解释
Determine Whether Two Date Ranges Overlap
<强> SQL Fiddle Demo 强>
SELECT c.*, a.*
FROM clinic c
LEFT JOIN appoinment a
ON c.`id` = a.`clinic_id`
AND `start_time` < '2016-01-20 13:30:00'
AND `end_time` > '2016-01-20 13:00:00'
WHERE `start_time` IS NULL;
SELECT c.*, a.*
FROM clinic c
LEFT JOIN appoinment a
ON c.`id` = a.`clinic_id`
AND `start_time` < '2016-01-20 11:30:00'
AND `end_time` > '2016-01-20 11:00:00'
WHERE `start_time` IS NULL;
如果您与任何约会的日期重叠,您将拥有匹配的联接。否则,时间段是免费的,您将获得NULL