我正在嘗試爲保留系統編寫SQL查詢以查找某個項目的最早可用租用日期。使用SQL查詢幫助查找預訂系統的下一個可用日期
項目按SKU在數據庫中進行分類。一個項目可以有多個副本,每個副本在數據庫中通過序列號唯一標識。
當搜索物品的最早可用租賃日期時,選擇哪個序列號並不重要;只需下一個可用。
該數據庫有2個表; 「預訂」和「項目」。還有一個包含數千個YYYY-MM-DD未來日期的日曆表格。
保留表包含列; 「record_number」,「sku」,「serial_number」,「start_date」,「end_date」加上客戶數據。這是每個預訂在製作時都被記錄的地方。
Items表包含列; 「sku」和「serial_number」。這是系統中所有租賃項目的清單。
我已經解決了這個問題超過2天了,但是我的SQL知識還不足以解決這個難題。
據我已經進步爲生成具有特定SKU至少一個預約日期列表:
SELECT calendar.dt
FROM calendar
LEFT JOIN reservations ON calendar.dt >= reservations.start_date
AND calendar.dt <= reservations.end_date
WHERE reservations.sku = 'ABC123'
我能子查詢以上變成了「NOT IN ......」 select語句,但只能完成對特定SKU沒有保留的查找日期。我需要找到至少有一個項目可用的第一個日期。
我想象過從Calendar表中將SKU與Item中的SKU結合起來,預訂表中的預留號在reservation_record中查找「NULL」,表示該日期和序列號組合中沒有預留。但是我一直無法寫出這樣的查詢。
歡迎提問。
該查詢會過濾掉有預留的日期,但是有足夠的物品可以進行更多的預訂。 – 2011-02-26 01:52:46
@Eran Galperin - 給出關於商品表的假設的簡單修復。目前尚不清楚如何管理庫存。每件商品是否都有自己的排或者是否有現貨價值? OP在這一點上並不清楚。 – Thomas 2011-02-26 03:08:42