我的数据库中有住宿产品。在每个酒店下面都有一些期间,这些期间是预订的日期间隔。在很短的时间内,有房型,价格和分配。
所以我们这样说吧;
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
另一方面,我的数据库上有一个预订表,它保存了预订详细信息。我们这样说吧;
一个人在 22.05.2011 - 30.05.2011 之间预订 HOTEL A * 对于房间A.此预订也已保存到数据库中。
问题是这个;
我怎样才能在这里计算分配?在我的例子中,5月22,23,24,25,26,27,28,29的房间A分配需要为2。我需要计算一下,因为在请求的日期间隔之间的任何日期,我都不会显示分配为0的房间。
我使用c#实体框架进行计算,我的数据库在ms sql server上。存储过程示例也不错。那个!
编辑: 这是我正在尝试的示例代码;
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 :(得分:1)
这样的东西?
步骤1:对于每个预订,确定预约开始/结束重叠的时段。您可以根据(reservation_end&gt; = period_start和reservation_start&lt; = period_end)加入。这应该返回保留重叠的时段。
第2步:减去每个时期的分配。我不确定你的例子中只有1个预约如何得到2个分配,所以不能告诉你如何做这个数学。
除非我知道数据模型和一些示例数据,否则我无法提供具体示例。你能提供这些吗?