2010-12-08 294 views
2

我有一個約會表約會的一些'資源' 我需要做的是查詢並返回(對於特定資源)所有日期範圍內的免費預約插槽。tsql intersect之間的2個日期時間記錄集

我以爲最好的方法來處理這將是生成一個臨時表的可能約會時間(因爲約會的長度可能是30/60/90分鐘 - 約會的長度將爲查詢指定)。然後選擇這兩個記錄集的相交點。即所有這些 - 在日期範圍內 - 約會表中沒有約會。從而返回該資源的所有可能的約會。

或者可能只是再次生成可能的約會日期時間的記錄,然後除了實際約會已經預訂..?

除非有人可以建議一個更容易的選項。

還不能完全確定如何生成候選條件的表,即有記錄表2010-12-08 09:00, 2010-12-08 10:00,等(1個小時預約)...

什麼想法?

編輯:對符合候選條件一個模糊的想法...

DECLARE @startDate DateTime 
DECLARE @EndDate DateTime 

set @startDate = '2010-12-08 09:00' 
set @endDate = '2010-12-11 09:00'; 

with mycte as 
(
    select cast(@startDate as datetime) DateValue 
    union all 
    select dateadd(mi,30,DateValue) 
    from mycte 
    where DateValue <= @endDate 
    and datepart(hh, dateadd(mi,30,DateValue)) Between 9 AND 16 

) 
select DateValue 
from mycte 

回答

1

這是一個經典的差距和島嶼問題。它基本上是一個常見問題,需要在序列中識別缺失值(缺口)。幸運的是,有關Manning書籍SQL Server MVP Deep Dives這個主題的免費樣章。希望它能提供靈感,因爲它爲一些可能的方法提供了指導。

http://www.manning.com/nielsen/SampleChapter5.pdf

這是問題的伊茨克奔甘的描述,從上面的章引用。

差距和島嶼問題涉及 在序列 缺失值...所涉及的序列也可以是 顳,如訂單日期,其中一些 丟失由於不活動 週期(週末,假期)。查找 不活動時間段是 間隙問題的一個示例,查找活動的時間段爲 島問題的示例。

+0

虐待有一個閱讀,謝謝 – nat 2010-12-08 13:59:17

相關問題