【问题标题】:tsql intesect between 2 datetime recordsetst sql 在 2 个日期时间记录集之间相交
【发布时间】:2011-05-22 03:02:30
【问题描述】:

我有一个约会表,其中包含许多“资源”的约会 我需要做的是查询并返回(针对特定资源)一个日期范围内的所有免费预约空档。

我认为解决此问题的最佳方法是生成可能的约会时间的临时表(因为约会的长度可能是 30/60/90 分钟 - 将为查询指定约会长度。)和然后选择这两个记录集的交集。即所有这些 - 在日期范围内 - 约会表中没有约会。从而返回该资源的所有可能约会。

或者也许只是 - 再次 - 生成可能的约会日期时间的记录,然后除了已经预订的实际约会......?

当然,除非有人可以提出更简单的选择。?

也不完全确定如何生成可能的表格,即包含2010-12-08 09:00, 2010-12-08 10:00, 等记录的表格(对于 1 小时的约会)...

有什么想法吗?

编辑:对可能性有一个模糊的想法......

DECLARE @startDate DateTime
DECLARE @EndDate DateTime

set @startDate = '2010-12-08 09:00'
set @endDate = '2010-12-11 09:00';

with mycte as
(
   select cast(@startDate as datetime) DateValue
   union all
   select dateadd(mi,30,DateValue)
   from    mycte   
   where   DateValue <= @endDate
   and datepart(hh, dateadd(mi,30,DateValue)) Between 9 AND 16

)
select DateValue
from    mycte

【问题讨论】:

    标签: sql-server tsql date intersect gaps-and-islands


    【解决方案1】:

    这是一个典型的间隙和孤岛问题。它本质上是一个常见问题,您需要在序列中识别缺失值(间隙)。幸运的是,Manning 的书 SQL Server MVP Deep Dives 中有一个关于这个主题的免费示例章节。希望它能提供灵感,因为它为许多可能的方法提供了指导。

    http://www.manning.com/nielsen/SampleChapter5.pdf

    这是 Itzik Ben-Gan 对问题的描述,引用自上一章。

    差距和岛屿问题涉及 序列中的缺失值 ...所涉及的序列也可以 是临时的,例如订单日期,一些 其中因不活动而丢失 期间(周末、节假日)。发现 不活动时期就是一个例子 差距问题和寻找时期 活动是一个例子 岛屿问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 2021-11-15
      • 2011-04-26
      • 2022-01-24
      相关资源
      最近更新 更多