SQL Server查询以检查特定日期的特定时段是否可以预订

时间:2012-07-16 04:58:16

标签: sql-server common-table-expression

我有一张预订表,用于存储预订信息。我们允许在白天预订两个不同的时段,让我们在上午10:30说出&工作日下午4:00对于特定的插槽,我们最多只能访问50个访客。

样本表的详细信息&数据显示在下面

根据示例数据,我们无法预订2012-08-23/16:30,因为它已达到最大访问者数量。

以下查询将获取我需要在日历上阻止特定时间的日期,以便用户可以预订此日期。

 SELECT 
     SUM(NoOfVisitors) as Total, TimeSlot, BookingDate, BookingCancelled  
 FROM 
     VisitorBooking  
 GROUP BY 
     BookingDate, TimeSlot, BookingDate, BookingCancelled 
 HAVING 
     SUM(NoOfVisitors) >= 50 AND TimeSlot = '16:30' 

输出

Total TimeSlot  BookingDate BookingCancelled
50    10:30     2012-08-23  0

我在编写SQL查询时遇到问题,该查询将检查它们是否有任何取消并将计算&给我一些我需要阻止的日期。我尝试了一些查询,但这并没有给我想要的结果。如果我运行上述查询,它也会显示2012-07-20已被屏蔽,但由于其中一个预订已被取消,因此仍有3位访问者可用。

此查询给出了结果,但我不完全确定这是否正确

 SELECT 
     SUM(NoOfVisitors) as Total, TimeSlot, BookingDate, BookingCancelled  
 FROM 
     VisitorBooking  
 GROUP BY 
     BookingDate, TimeSlot, BookingDate, BookingCancelled 
 HAVING 
     (SUM(NoOfVisitors) >= 50 AND TimeSlot = '16:30' )
AND (BookingCancelled = 'false')

我迷失了,我会感谢这方面的帮助

我不确定是否可以在不使用CTE查询的情况下实现此目的。

CREATE TABLE Booking(
    BookingID nvarchar(10) NOT NULL,
    FirstName nvarchar(150) NULL,
    LastName nvarchar(150) NULL,
    Email nvarchar(150) NULL,
    CompanyName nvarchar(200) NULL,
    Country nvarchar(150) NULL,
    Phone varchar(50) NULL,
    NoOfVisitors int NULL,
    BookingDate date NULL,
    TimeSlot varchar(12) NULL,
    BookedOn datetime NULL,
    GUIDNo varchar(50) NULL,
    BookingCancelled bit NULL,
    )

示例数据

BookingID   FirstName LastName Email    CompanyName Country Phone   NoOfVisitors    BookingDate     TimeSlot    BookedOn    GUIDNo  BookingCancelled
---------------------------------------------------------------------------------------------------------------------------------------------------
1900221519  Mark    Tailor  abc@abc.com     XYZ     USA     111111  45              2012-07-20       10:30       2012-06-25 XXXXX   false
5600515751  Michael Brown   abc@abc.com     XYZ     UK      111111  2               2012-07-20       10:30       2012-06-25 XXXXX   false
1638934678  John    Lee     abc@abc.com     XYZ     UK      111111  3               2012-07-20       10:30       2012-06-25 XXXXX   true
8852224170  Lee Wong        abc@abc.com     XYZ     China   111111  50              2012-08-23       16:30       2012-07-15 XXXXX   false

0 个答案:

没有答案