在预订表中找到足够大的空白

Rob*_*Rob 5 mysql sql gaps-and-islands

租赁系统使用预订表来存储所有预订和预订:

booking | item | startdate        | enddate
1       | 42   | 2013-10-25 16:00 | 2013-10-27 12:00
2       | 42   | 2013-10-27 14:00 | 2013-10-28 18:00
3       | 42   | 2013-10-30 09:00 | 2013-11-01 09:00
…
Run Code Online (Sandbox Code Playgroud)

假设用户想要从2013-10-27 12:00直到2013-10-28 12:00租用项目42,这是一天的时间段.系统将告诉他,该项目在给定的时间范围内不可用,因为预订号码.2碰撞.

现在,我想建议所选项目再次可用的最早租赁日期和时间.当然,考虑用户所需的时间段(1天),从用户期望的日期和时间开始.

所以在上面的例子中,我正在寻找一个返回2013-10-28 18:00的SQL查询,因为自2013-10-27 12:00以来最早的项目42将可用1天,是2013-10-28 18:00至2013-10-29 18:00

因此,我需要找到预订之间的差距,这个差距足以容纳用户的预订,并且与预期的开始日期尽可能接近.

或者换句话说:我需要找到给定项目的第一个预订,之后有足够的空闲时间来预订用户.

这是否可以在普通的SQL中进行,而不必遍历每个预订及其后继者?