我有一个简化的表Bookings,有两列BookDate和BookSlot.该BookDate列仅包含日期(没有时间),该BookSlot列将包含从0到1410(包括0和1410)的30分钟间隔的一天中的时间.(即600 =上午10:00)
如何在未经过循环的情况下找到未来可用的第一个插槽(未预订)?
这是表定义和测试数据:
Create Table Bookings(
BookDate DateTime Not Null,
BookSlot Int Not Null
)
Go
Insert Into Bookings(BookDate,BookSlot) Values('2014-07-01',0);
Insert Into Bookings(BookDate,BookSlot) Values('2014-07-01',30);
Insert Into Bookings(BookDate,BookSlot) Values('2014-07-01',60);
Insert Into Bookings(BookDate,BookSlot) Values('2014-07-01',630);
Insert Into Bookings(BookDate,BookSlot) Values('2014-07-02',60);
Insert Into Bookings(BookDate,BookSlot) Values('2014-07-02',90);
Insert Into Bookings(BookDate,BookSlot) Values('2014-07-02',120);
Run Code Online (Sandbox Code Playgroud)
我想要一种方法来返回表中没有的第一个可用插槽,以及将来(基于服务器时间).
根据以上测试数据:
如果将来没有预订,该功能将简单地返回将来最接近的半小时.
-
这个SQL小提琴就在这里:
Jay*_*vee -1
尝试这个:
SELECT a.bookdate, ((a.bookslot/60.)+.5) * 60
FROM bookings a LEFT JOIN bookings b
ON a.bookdate=b.bookdate AND (a.bookslot/60.)+.50=b.bookslot/60.
WHERE b.bookslot IS null
Run Code Online (Sandbox Code Playgroud)