MS Access SQL 日期范围查询

不拘一格

我正在研究教室预订工具。一个核心组件是能够将请求的日期范围与现有的预订进行比较,以确保没有重叠。我在这里阅读了几个与日期范围相关的问题,并研究了 Salman 对 Allen 区间代数的解释和实现(SQL Query to Find Overlapping (Conflicting) Date Ranges),直到我理解为止。这是我想出的精简版。

tblRooms
roomID      room
5           110
30          178

tblReservations
reservedID  fkRoom dateIn     dateOut
1           5      3/10/2017  3/15/2017
2           5      3/1/2017   3/3/2017
4           5      4/1/2017   4/30/2017

SELECT DISTINCTROW tblRooms.roomID, tblRooms.room
FROM tblRooms LEFT JOIN tblReservations 
ON tblRooms.roomID = tblReservations.fkRoom
WHERE NOT Exists (
  SELECT DISTINCT tblRooms.roomID 
  FROM tblRooms 
  WHERE ((tblReservations.[dateOut] >= #3/3/2017#) 
  AND (#3/9/2017# >= tblReservations.[dateIn])));

我得到的回报不一致。这些日期将不包括房间 110,因为它们应该。其他测试输入(#3/4/2017# 和 #3/10/2017#、#4/1/2017# 和 #4/14/2017#)不会。我尝试过“WHERE NOT (...”、“WHERE Exists () = False”等的组合。

我在一个限制性很强的网络上工作,在那里我不能随意引入模板——我创建数据库时唯一的选择是“空白”和“Web”,所以我必须自己动手。我感谢任何帮助。

史蒂夫·洛弗尔

您可以尝试以下操作:

SELECT DISTINCTROW tblRooms.roomID, tblRooms.room
FROM tblRooms
WHERE NOT Exists (
  SELECT 1
  FROM tblReservations 
  WHERE
  tblReservations.fkRoom = tblRooms.roomID
  AND ((tblReservations.[dateOut] >= #3/3/2017#) 
  AND (#3/9/2017# >= tblReservations.[dateIn])));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章