Две таблицы с выбором времени не перекрываются - PullRequest
0 голосов
/ 28 марта 2019

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

Мне нужно все время находить, где можно выполнить задачу и кем.

Таблица a - это список времени, когда человек забронирован.

Таблица b - это список всех временных интервалов, в которых задание может быть перекрестным, быть списком, который может выполнить задание

table a
2019-03-28 00:00:00.0000000 | 2019-03-28 23:59:00.0000000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-03-29 00:00:00.0000000 | 2019-03-29 23:59:00.0000000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-03-30 00:00:00.0000000 | 2019-03-30 23:59:00.0000000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-03-31 00:00:00.0000000 | 2019-03-31 23:59:00.0000000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-04-01 00:00:00.0000000 | 2019-04-01 07:00:00.0000000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-04-01 13:00:00.0000000 | 2019-04-01 23:59:00.0000000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-04-02 00:00:00.0000000 | 2019-04-02 07:00:00.0000000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-04-02 13:00:00.0000000 | 2019-04-02 23:59:00.0000000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-04-03 00:00:00.0000000 | 2019-04-03 07:00:00.0000000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-04-03 19:00:00.0000000 | 2019-04-03 23:59:00.0000000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6


table b
2019-03-29 18:00:00.000 | 2019-03-29 20:00:00.000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-03-29 19:00:00.000 | 2019-03-29 21:00:00.000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-03-29 20:00:00.000 | 2019-03-29 22:00:00.000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-03-29 21:00:00.000 | 2019-03-29 23:00:00.000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-03-29 22:00:00.000 | 2019-03-30 00:00:00.000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-03-29 23:00:00.000 | 2019-03-30 01:00:00.000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-03-30 00:00:00.000 | 2019-03-30 02:00:00.000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-03-30 03:00:00.000 | 2019-03-30 05:00:00.000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-03-30 04:00:00.000 | 2019-03-30 06:00:00.000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6
2019-03-30 05:00:00.000 | 2019-03-30 07:00:00.000 | C235E2D9-F1C8-4D04-BA71-097BE66135E6

DECLARE @BookedTimeslot TABLE (

    [StartTime] datetime2(7),

    [EndTime] datetime2(7),
    [StakeholderId] uniqueidentifier

)

DECLARE @PossibleTimeslot TABLE (

    [StartTime] datetime2(7),

    [EndTime] datetime2(7),
    [StakeholderId] uniqueidentifier

)

1 Ответ

1 голос
/ 28 марта 2019

Звучит так, будто вам нужны строки в B, где нет записи A, которая перекрывает временной интервал B для соответствующего человека (ID).

SELECT b.StartTime, b.EndTime, b.StakeholderID
FROM TableB b
WHERE NOT EXISTS (SELECT 'x' FROM TableA a 
  WHERE b.StakeholderID=a.StakeholderID
  AND (a.StartTime<b.EndTime AND a.EndTime>b.StartTime))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...