我需要一種方法來查看超額預定的給定資源(在本例中爲客房/牀)。這是我的表格結構。很抱歉的匈牙利命名法:SQL調度 - 超額預訂報告
tblRoom
--RoomID
tblBooking
--BookingID
--BeginDate
--EndDate
--AssignedRoomID(外鍵)
我沒有任何非工作的SQL在這裏發佈,因爲我真的不知道從哪裏開始。我正在使用MS Access,但如果可能的話,我正在尋找數據庫不可知的解決方案。可以不得不更改某些關鍵字以匹配給定SQL引擎的方言,但我希望避免使用專有的或僅在一個RDBMS中可用的其他功能。
我意識到最好避免從一開始就超量預訂,但這不是這個問題的要點。
如果有幫助,幾天前我發佈了一個相關問題,關於如何查找尚未針對給定數據範圍預訂的資源。你可以看到這個問題here。
EDIT1:
在回答下面的答案,我已經修改了你的SQL略,使其在訪問工作,以及當它涉及到的檢測衝突的更準確。如果我錯誤地發現您的解決方案不允許您發現一些衝突,但是當給定的預訂結束日期和不同的預訂開始日期同一天發生衝突時,也會顯示衝突,這實際上是允許的,並且不應該表現爲衝突。我是否正確理解這一點,或者我在這裏錯過了什麼?
SELECT
*
FROM
tblBooking AS booking
INNER JOIN
tblBooking AS conflict
ON [conflict].AssignedRoomID = [booking].AssignedRoomID
AND (([conflict].BeginDate >= DateAdd("d", -1, [booking].BeginDate) AND [conflict].BeginDate < [booking].EndDate)
OR ([conflict].EndDate > [booking].BeginDate AND [conflict].EndDate < [booking].EndDate))
AND [conflict].BookingID <> [booking].BookingID
您已經做了一些改變來打破邏輯。您在預訂過程中檢查衝突的開始或結束是否發生,但如果衝突在預訂之前開始並在之後結束會怎麼樣?你需要對我的示例代碼進行的唯一修改是將'> ='更改爲'>',將<='更改爲'<'。 – MatBailie 2011-05-27 08:25:00
在我的第一個示例中更改<= and > =後,您是否可以顯示某些不應顯示的情況,以及某些應該顯示時未顯示的情況? – MatBailie 2011-05-27 08:27:29