Я работаю с базой данных SQLite, и у меня есть три таблицы, описывающие здания, комнаты и запланированные события.SQL - Поиск открытых пространств в расписании
таблиц выглядеть следующим образом:
- Здание (ID, Имя)
- Номера (ID, BuildingID, номер)
- События (ID, BuildingID, RoomID, дни, s_time, e_time)
Таким образом, каждое событие связано со зданием и комнатой. Столбец Days содержит целое число, которое является произведением простых чисел, соответствующих дням недели (значение 21 означает, что событие происходит во вторник = 3 и в четверг = 7).
Я надеюсь найти способ создания отчета о комнатах в конкретном здании, которое будет открыто в течение ближайших нескольких часов, а также как долго они будут открыты.
Вот то, что я до сих пор:
SELECT Rooms.Number
FROM Rooms
INNER JOIN Buildings on (Rooms.BuildingID = Buildings.ID)
WHERE
Buildings.Name = "BuildingName"
EXCEPT
SELECT Events.RoomID
FROM Events
INNER JOIN Buildings on (Events.BuildingID = Buildings.ID)
WHERE
Buildings.Name = "BuildingName" AND
Events.days & 11 = 0 AND
time("now", "localtime" BETWEEN events.s_time AND events.e_time;
Здесь я нахожу все помещения для конкретного здания, а затем я удалить номера, которые в настоящее время имеют запланированное событие в стадии разработки.
Я с нетерпением жду всех полезных советов/комментариев.
> Столбец Days содержит целое число, которое является произведением простых чисел, соответствующих дням недели (значение 23 означает, что событие происходит во вторник = 3 и в четверг = 7). Не было продукта 3 и 7 равным 21? Я смущен вашей методологией. – stefgosselin
Да, спасибо, что поймали это. – gjarzab
Рядом с дубликатом: http://stackoverflow.com/questions/6018445/get-list-with-start-and-end-values-from-table-of-datetimes –