获取时间段预订数据的最有效方法?

时间:2015-01-14 00:23:42

标签: sql-server asp.net-mvc

我有一个预订系统,允许用户预订30分钟的时间段(例如下午1点,下午1点半,下午2点等...)

在sql数据库中,我可能有一个预订上午10点,预订下午1点,两个下午2点。我试图在显示每个插槽当前预订数量的日期时间范围之间显示所有30分钟预订位置的视图。

我没有明确存储每个插槽,因为它效率不高。有没有办法让sql返回'空'单个查询中的时间段?我不想创建时间段数组,然后分别查询每个时间段的预订总数。

我使用sql server和asp.net mvc6作为我的技术基础。关于技术的一些建议将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:4)

您需要构建一个30分钟的间隔时间范围表,并使用您的表格left join来获取所有时间段

此查询从startDate开始生成30分钟的间隔时间,生成总共12个时隙,您可以相应地修改它。

declare @startDate datetime ='2014-01-12 12:00:00'

;with cte(value,nextval,n)
as
(
   select CONVERT(VARCHAR(5),@startDate,108) as value,  
       dateadd(minute, datediff(minute, 0, @startDate)+30, 0) as nextval, 1 as n
   union all
   select  CONVERT(VARCHAR(5),cte.nextval,108) as value, 
       dateadd(minute, datediff(minute, 0, cte.nextval)+30, 0) as nextval, n+1
   from cte
   where n <=12
)
select * from cte
left join Table1
on cte.nextval = Table1.timeslotvalue