【问题标题】:SQL Filtering based on Calculated Time Slots基于计算时隙的 SQL 过滤
【发布时间】:2012-03-14 12:38:17
【问题描述】:

我正在为工作中的投影仪制作一个简单的预订系统。

这里是场景。每台投影机都可以将其可用性设置为全天的一刻钟段。即投影仪 1 在每天上午 8:15 - 下午 1:45 和下午 3:00 - 5:15 之间可用(也可以更改为每天设置不同的可用性)。只要投影仪可用,就可以在一天中的任何时间段预订投影仪。所以我在我的 sql 数据库中进行了设置(使用我的 asp.net mvc 前端)。

我的问题是在这种情况下搜索的最佳方法是什么。即用户 A 进来并说给我找到本周五中午 12 点至下午 3 点之间可用的投影仪。我正在努力编写一个有效的 sql 查询来过滤它。到目前为止,我最好的选择是撤回所有投影仪,然后以编程方式确定它们是否可用并且在这段时间之间没有预订。它有效,但效率极低。我偶然发现了一个使用由存储过程生成的临时表的想法,该表可以被过滤但并不完全存在。

有没有人知道我该如何解决这个问题?

提前致谢

【问题讨论】:

  • 您至少需要显示您的数据库架构。最好是您尝试查询。
  • 你能提供你的表结构吗?

标签: sql sql-server asp.net-mvc tsql


【解决方案1】:

我可能会有一个名为 ProjectorReservations 的表,其中包含开始时间和结束时间(在您可能关心的其他字段中,即谁在租用投影仪)。

搜索投影仪看起来像这样:

SELECT projectorName
FROM Projectors
WHERE NOT EXISTS 
   (SELECT 1 FROM ProjectorReservations
   WHERE Projectors.projectorName = ProjectorReservations.projectorName
   AND (ProjectorReservations.startTime < {end_time}
   OR ProjectorReservations.endTime > {start_time}))

这几乎是为了确保在您寻找的预订结束之前没有预订开始,反之亦然。显然,您将需要相应地交换您的字段,但这应该会给您一个总体思路

【讨论】:

    猜你喜欢
    • 2020-01-18
    • 1970-01-01
    • 2018-11-06
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多