当前位置: 首页 > 面试题库 >

SQL计划-选择给定日期范围内所有可用的房间

姬温文
2023-03-14
问题内容

我使用Microsoft的想法来存储资源和预订信息。简而言之,诸如酒店房间之类的资源没有日期记录,预订记录具有BeginDate和EndDate。

我正在尝试使用MS的查询来检索房间可用性信息,但有一些情况告诉我MS的查询还有很多不足之处。这是我指的MS文章: http
//support.microsoft.com/kb/245074

如何检索给定日期范围内的可用房间?这是我的查询,返回简单的预订清单:

SELECT r.RoomID, b.BeginDate, b.EndDate
FROM tblRoom as r INNER JOIN tblBooking b ON r.RoomID = b.AssignedRoomID;

但是对于如何获取给定日期范围内的可用房间列表,我仍然感到困惑。

我正在使用Microsoft
Access,但我想使查询尽可能地与DBMS无关。虽然这并不是我的问题,但是如果您认为我使用的数据模型不正确,请这样说,因为我愿意考虑一种更好的存储数据的方法。

Edit1:
我没有提到我不喜欢MS的查询有两个原因。首先,我对WHERE子句中的3种不同的OR运算符感到非常困惑。这些真的有必要吗?其次,我不喜欢保存查询并将其用作表的想法,尽管如果工作完成了,我愿意这样做,但在这种情况下,我相信会做到这一点。

Edit2:
这是我使用此处给出的出色答案 着手解决方案。这是MS Access SQL方言(请原谅):

SELECT * FROM tblRoom AS r  
WHERE RoomID NOT IN  
 (SELECT AssignedRoomID as RoomID From tblBooking  
  WHERE assignedroomid IS NOT NULL AND assignedroomid = r.roomid AND 
    (BeginDate < @BookingInquiryEndDate AND EndDate > @BookingInquiryBeginDate)  
 )

问题答案:

您希望所有在该日期范围内没有预订的房间,即,如果您的sql引擎执行子查询…

Select * From Rooms r 
where not exists 
     (Select * From Bookings 
      Where room = r.room
         And startBooking < @endRange
         And endBooking > @startRange)

HIK,要了解对room = r.room子句的需求,请尝试以下两个查询

查询一(用room = r.room子句)

       Select r.*,
       Case Where Exists
           (Select * From Bookings 
            Where room = r.room
                 And startBooking < @endRange
                 And endBooking > @startRange) 
        Then 'Y' Else 'N' End HasBooking
    From Rooms r

查询二(不包含room = r.room子句)

    Select r.*,
       Case Where Exists
           (Select * From Bookings 
            Where startBooking < @endRange
                 And endBooking > @startRange) 
        Then 'Y' Else 'N' End HasBooking
    From Rooms r

请注意,第一个为输出的每一行在HasBooking中返回不同的值,因为子查询与外部查询“关联” …它在agaio上反复运行,对于每个外部查询结果行一次。

第二个对于所有行都是相同的值…它仅执行一次,因为其中的任何内容都不取决于为其生成外部查询的哪一行。



 类似资料:
  • 问题内容: 我正在尝试编写一个MySQL查询,以获取给定日期之间所有月份的每月平均值。我的想法是这样的: 查询,类似 您看到,在2009年4月没有输入任何值,但是我希望它在输出中显示为0、0值。关于如何实现这一目标的任何想法?可以在MySQL中完成吗? 问题答案: 我同意Lieven的回答,请创建一个表,其中包含您可能需要的所有月份,并使用该表将“ LEFT JOIN”到结果表。请记住,这是一个很

  • 问题内容: 我正在查询支持凭单数据库,并且每个凭单都有一个列“打开日期”和“关闭日期”。票证经常保持开放状态多天,因此我们需要能够拉出每天开放的票证数量。 例如,对于4/8/14,我们需要知道4/8上已打开多少张票,以及4/8之前已打开但在4的12:00 am仍未打开的未关闭票的总数/ 8(在4/8期间或之后可能已关闭,也可能未关闭)。 对于单个日期来说,这似乎足够简单,但是现在我需要编写一个查询

  • 问题内容: 我希望得到一些帮助,以帮助我编写一些自己编写的SQL语句。 我有一张数据表: 我需要获得以下信息: 换句话说,按日期划分日期范围。在SQL中甚至可能吗? 我的数据库是Oracle 11G R2,由于某些情况,我担心不能使用PL / SQL。 问题答案: 可以在SQL中执行此操作。有两个技巧。首先是生成一系列数字,您可以使用进行CTE处理。 第二个是将正确的逻辑放在一起以扩展日期,同时保

  • 本文向大家介绍浅谈Bootstrap的DatePicker日期范围选择,包括了浅谈Bootstrap的DatePicker日期范围选择的使用技巧和注意事项,需要的朋友参考一下 用日期插件时,经常会有一种需求。两个input框选择。开始时间小于结束时间,结束时间大于开始时间,开始时间和结束时间都不大于当前时间。 我们当然可以用选择的结果来判断输入正确与否。但是更好的办法是让我们的日期选择插件做出一些

  • 问题内容: 我正在尝试创建一个Android应用程序,该应用程序将在给定范围内(但在它们之间 不 相等)生成一系列随机值(在这种情况下为整数),并在简单的TextView中显示它们 假设我们有范围 R = [1、2、3、4、5、6、7、8、9、10、11、12、13] 每次我按下 “生成” 按钮时,我想随机生成5个不同的结果 每个“生成”的示例: 4,9,2,12,10 5、1、6、8、13 10

  • 我正在使用Dan Grossman的Twitter引导程序的日期范围选择器。