У меня есть очень простая таблица, из которой мне нужно создать представление. Сам стол имеет разные комнаты, и время начала / окончания каждой комнаты используется (есть резервирование).
Date Start_Time End_Time Room
2019-06-08 08:00 09:00 101
2019-06-08 12:00 14:00 101
2019-06-08 18:30 20:00 101
2019-06-08 10:00 13:30 201
2019-06-08 14:00 15:00 201
2019-06-08 08:00 09:00 308
2019-06-08 09:30 12:15 308
2019-06-08 16:00 17:00 308
2019-06-08 17:30 18:00 308
Предположим, что есть больше дат, комнат и времени, конечно. Время на самом деле хранится как datetime, но я упрощаю его здесь.
То, что я пытаюсь сделать, - это создать представление, в котором мы можем видеть время, когда каждая комната доступна между бронированием, по дням. Это означает, что время окончания бронирования номера становится временем начала доступности комнаты, а время начала следующего бронирования номера является временем окончания доступности комнаты.
Результат будет выглядеть следующим образом.
Date Start_Time End_Time Room
2019-06-08 00:00 08:00 101
2019-06-08 09:00 12:00 101
2019-06-08 14:00 18:30 101
2019-06-08 20:00 23:59 101
2019-06-08 00:00 10:00 201
2019-06-08 13:30 14:00 201
2019-06-08 15:00 23:59 201
2019-06-08 00:00 08:00 308
2019-06-08 09:00 09:30 308
2019-06-08 12:15 16:00 308
2019-06-08 17:00 17:30 308
2019-06-08 18:00 23:59 308
У меня проблемы с поиском хорошего способа сделать это. Моей первоначальной мыслью было запустить 2 выбора данных, чтобы получить время начала и окончания, а затем объединить их в один столбец с простым кодом, определяющим время начала / окончания (1/2 соответственно), создавая представление из этогоданные и поворот его, чтобы сформировать то, что мне нужно. Но у меня проблемы с этим.
Выбранный код выглядит следующим образом:
Create View [Room_Availability]
SELECT
Date
,start_time as 'Time'
,'1' as 'Time_Type'
,id as 'Room'
from room_reservations
UNION
SELECT
Date
,end_time as 'Time'
,'1' as 'Time_Type'
,id as 'Room'
from room_reservations
Results:
Date Time Time_Type Room
2019-06-08 08:00 1 101
2019-06-08 12:00 1 101
2019-06-08 18:30 1 101
2019-06-08 10:00 1 201
2019-06-08 14:00 1 201
2019-06-08 08:00 1 308
2019-06-08 09:30 1 308
2019-06-08 16:00 1 308
2019-06-08 17:30 1 308
2019-06-08 09:00 2 101
2019-06-08 14:00 2 101
2019-06-08 20:00 2 101
2019-06-08 13:30 2 201
2019-06-08 15:00 2 201
2019-06-08 09:00 2 308
2019-06-08 12:15 2 308
2019-06-08 17:00 2 308
2019-06-08 18:30 2 308
Возможно, это был неправильный путь, так как я не могу понять, как я могу повернуть данные взаказ мне нужен. Я очень открыт для предложений.