【问题标题】:Most efficient way to get booking data for time period?获取时间段预订数据的最有效方法?
【发布时间】:2015-01-14 12:44:27
【问题描述】:

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

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

我没有明确存储每个插槽,因为它不是很有效。有没有办法让 sql 在单个查询中返回“空”时隙?我不想创建一个时间段数组,然后单独查询每个时间段以获取预订总数。

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

谢谢。

【问题讨论】:

    标签: sql-server asp.net-mvc


    【解决方案1】:

    您需要建立一个 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
    

    【讨论】:

    • 谢谢你。我“认为”我理解。 30 分钟的间隔时间范围是否需要为 24 小时内的每个项目设置一个“槽”?
    猜你喜欢
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多