我有一张预订表,用于存储预订信息。我们允许在白天预订两个不同的时段,让我们在上午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