2011-04-18 213 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