2011-04-18 210 views
0

夥計們,這裏是我所遭受的情況;日期間隔分配計算 - 日期計算

我在我的數據庫上有住宿產品。每間酒店下方都有預約時間間隔。並在很短的時間內有房型,價格和分配。

所以可以這麼說;

HOTEL A 

01.05.2011 - 25.05.2011 
     Room A : 3 Allotment daily, 34 USD 
     Room B : 4 Allotment daily, 45 USD 
26.05.2011 - 14.06.2011 
     Room A : 3 Allotment daily, 45 USD 
     Room B : 4 Allotment daily, 67 USD 

另一方面,我的數據庫上有一個預留表,它包含預留詳細信息。可以這麼說;

一個人預訂了酒店A *之間的2011年5月22日 - 2011年5月30日和室A.此預訂已保存到數據庫中也是如此。

問題是這樣的;

我該如何計算分配?在我的例子中,5月22日,23日,24日,25日,26日,27日,28日,29日的A房分配需要爲2。我需要計算這一點,因爲我不會在請求的日期間隔之間顯示任何日期的分配爲0的房間。

我使用c#實體框架進行計算,我的數據庫在ms sql server上。一個存儲過程的例子也不錯。 Thatnks!

編輯: 這是我想要的示例代碼;

declare @a as table(a date) declare @b as table(b date) insert @a values('2011-05-22') insert @b values('2011-05-30') 

;with e as(select a as dayt,0 as lvl from @a aa 

union all select DATEADD(DAY,1,aa.dayt) as dayt, lvl+1 from @b bb inner join e aa ON aa.dayt<bb.b) 

select * from e 
+0

嗯,看起來像不是一個有趣的話題:S – tugberk 2011-04-18 16:43:41

+0

不是很清楚應該在基礎表中做出什麼樣的改變。總之,預期的結果是什麼(在存儲數據和顯示數據方面)? – 2011-04-18 17:09:28

+0

@andriy我只是在尋找一個粗略的想法。我怎樣才能在這裏處理這個問題?我需要在這裏玩日期時間,但是我需要玩哪種方式,我不確定。 – tugberk 2011-04-18 17:19:12

回答

1

是這樣的嗎?

步驟1:對於每個預定確定預約開始/結束重疊的時段。您可以根據(reservation_end> = period_start和reservation_start < = period_end)加入。這應該會返回預留重疊的時間段。

第2步:減去每個週期的分配。我不確定你如何在你的例子中得到2分配,只有1個保留,所以不能告訴你如何做這個數學。

我不能提供具體的例子,除非我知道數據模型和一些樣本數據。你能提供這些嗎?

+0

感謝您的答案。我更新了我的曲目。請參閱t-sql示例。你認爲我說得對嗎?實際上,代碼是由其他人寫的,他們認爲它可以用於我的案例。 – tugberk 2011-04-20 08:47:15

+1

不太確定該代碼如何應用於您正在嘗試完成的任何事情。你的桌子是什麼樣的?列名,結構等,如果你不知道,那麼沒有人真的能夠協助。 – thomas 2011-04-22 15:38:44

+0

你是對的。我會親自試一試,看看我能做些什麼。謝謝。 – tugberk 2011-04-22 15:42:05