日期间隔分配计算 - 日期计算

时间:2011-04-18 14:40:04

标签: c# sql-server tsql entity-framework entity-framework-4

伙计们,这就是我所遭受的处境;

我的数据库中有住宿产品。在每个酒店下面都有一些期间,这些期间是预订的日期间隔。在很短的时间内,有房型,价格和分配。

所以我们这样说吧;

 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

1 个答案:

答案 0 :(得分:1)

这样的东西?

步骤1:对于每个预订,确定预约开始/结束重叠的时段。您可以根据(reservation_end&gt; = period_start和reservation_start&lt; = period_end)加入。这应该返回保留重叠的时段。

第2步:减去每个时期的分配。我不确定你的例子中只有1个预约如何得到2个分配,所以不能告诉你如何做这个数学。

除非我知道数据模型和一些示例数据,否则我无法提供具体示例。你能提供这些吗?