需要找到一个免费的给定时间段的诊所

时间:2016-01-19 19:38:30

标签: mysql ruby-on-rails

我需要一个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

因此,考虑到时间范围,我需要确定哪个诊所(如果有的话)在此期间是免费的

1 个答案:

答案 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