这里我有餐厅预订表。我想知道新预订的可用时间段,即使在开始时间和结束时间之间有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
我希望空闲时段直到当天结束。
提前致谢
答案 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,但你可以扩展逻辑以包含它们