餐厅预订提供不同间隔的插槽

时间:2014-06-03 07:24:03

标签: mysql sql

这里我有餐厅预订表。我想知道新预订的可用时间段,即使在开始时间和结束时间之间有10分钟的差异

请帮我检查餐厅餐桌的可用时间

这样的预订表,

booking id    reastaurantid tableid noofpersons starttime             endtime 
1               1              1       1        2014-05-02 04:30:00  2014-05-02 05:00:00
2               1              1       1        2014-05-02 05:30:00  2014-05-02 06:30:00
3               1              1       1        2014-05-02 10:00:00  2014-05-02 10:30:00
4               1              1       1        2014-05-02 11:00:00  2014-05-02 11:30:00
5               1              1       1        2014-05-02 12:00:00  2014-05-02 12:30:00
6               1              1       1        2014-05-02 17:30:00  2014-05-02 18:30:00

我希望空闲时段直到当天结束。

提前致谢

2 个答案:

答案 0 :(得分:1)

我有另一种提供方法。它自己加入预订表,并为每个预订的结束时间选择更大的其他预订的所有开始时间。这意味着它会为您提供每个预订的所有后续预订的列表。如果您有,您只需按预订分组,并从随后的预订中选择最短的开始时间。这应该为您提供每次预订的下一次预订的开始时间。然后你可以很容易地计算出差异。

SELECT e.booking_id,e.endtime, min(s.starttime) start_next_booking
FROM bookings e
    JOIN bookings s ON e.restaurantid=s.restaurantid AND e.tableid=s.tableid AND s.booking_id<>e.booking_id AND e.endtime<s.starttime
GROUP BY e.booking_id,e.endtime

我还没有测试过,但我认为应该这样做。

答案 1 :(得分:0)

首先让我们定义一个将在主要的

中使用的子查询
select @num:=@num+1 as row,
       start_time,
       end_time,
       booking_id
from the_table t, (select @num:=0) sess
order by start_time

然后使用子查询的sql

select 
  sub1.end_time as free_inverval_start,
  sub2.start_time as free_inverval_end
from (sub_query) sub1 
     join (sub_query) sub2 on sub1.row=sub2.row-1
                          and sub1.end_time<2.start_time

我跳过餐馆和桌子ID,但你可以扩展逻辑以包含它们