mysql-选择超出特定时间范围的记录

时间:2012-04-23 15:31:53

标签: mysql ruby-on-rails activerecord

我有一个医生日程表页面,医生可以从星期一到星期五配置他/她的工作时间(开始时间和结束时间)。

通过使用访问页面,用户可以在每天的医生预定时间内安排他们的预约。

我正在使用访问表进行用户约会,使用physician_schedules表来配置医生的工作时间。

访问表格条目

id  visit_date  scheduled_intime    scheduled_outtime   physician_id
1   2012-04-23  09:15:00        09:30:00        1
2   2012-04-23  09:31:00        10:00:00        1
3   2012-04-24  10:00:00        10:15:00        1
4   2012-04-25  11:00:00        11:15:00        1
5   2012-04-26  15:15:00        15:30:00        1
6   2012-04-27  16:00:00        16:30:00        1

physician_schedules表条目

id  start_time  end_time    day_of_week physician_id
1   09:00:00    18:00:00    monday      1
2   10:00:00    18:00:00    tuesday     1
3   11:00:00    17:00:00    wednesday   1
4   15:00:00    18:00:00    thursday    1
5   16:00:00    20:00:00    friday      1

注意每位医生每天应该只有一个条目(共5个条目)。

问题 当医生改变他/她的日程安排时间时,我想找出在特定日期超过医生安排时间的所有现有访问。

示例

1)如果医生按照

更改周三的工作时间,我想找到 id 4 的访问次数
start_time: 12:00:00 
end_time: 17:00:00

2)如果医生在工作时间后更换,我想找到 id 4,5 的访问次数

星期三:

start_time: 12:00:00 
end_time: 17:00:00

星期四

start_time: 15:30:00
end_time: 18:00:00

1 个答案:

答案 0 :(得分:0)

SELECT visits.id FROM visits INNER JOIN physician_schedules
  ON visits.physician_id = physician_schedules.id
  WHERE
        UPPER(day_of_week) = UPPER(DAYNAME(visit_date))
    AND (scheduled_intime < start_time OR scheduled_outtime > end_time)

这将返回所有医生所有错误安排的访问的所有ID。添加一个额外的WHERE,以便为特定的医生提供它们。