1

予約情報を保存する予約テーブルがあります。平日の午前 10 時 30 分と午後 4 時 00 分の 2 つの異なる時間帯の予約が可能です。特定の時間帯については、最大 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、予約の 1 つがキャンセルされたため、さらに 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
4

0 に答える 0