tsql пересекаются между двумя наборами записей datetime - PullRequest
2 голосов
/ 08 декабря 2010

У меня есть таблица встреч с встречами для ряда «ресурсов», мне нужно сделать запрос и вернуть (для определенного ресурса) все свободные слоты встреч в диапазоне дат.

У меня былоЯ подумал, что лучший способ достичь этого - создать временную таблицу возможных времен встречи (поскольку продолжительность встречи может быть 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

1 Ответ

1 голос
/ 08 декабря 2010

Это классическая проблема разрывов и островков. По сути, это распространенная проблема, когда вам нужно определить пропущенные значения (пробелы) в последовательности. К счастью, на эту тему есть бесплатный образец главы из книги Мэннинга «SQL Server MVP Deep Dives». Надеемся, что это послужит источником вдохновения, поскольку даст руководство по ряду возможных подходов.

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

Вот описание проблемы Ицик Бен-Гана, приведенное в приведенной выше главе.

Проблемы с пробелами и островами связаны пропущенные значения в последовательности ... Последовательности могут также быть временными, такими как даты заказа, некоторые из которых отсутствуют из-за неактивности периоды (выходные, праздничные дни). обнаружение периоды бездействия является примером проблема пробелов и нахождение периодов деятельности является примером проблема островов.

...