У меня есть таблица с датой начала и повторным подсчетом (упрощена):
CREATE TABLE tblSchedule (
schedStart timestamp,
schedRepeatMonth tinyint,
schedRepeatDays tinyint,
schedOpen bit
);
Таким образом, в упрощенном примере "открыть каждый вторник" будет иметь дату начала во вторник и повторять каждые 7 дней. Третья пятница начнется в пятницу и повторится один раз в месяц и 21 день. Закрыто на Рождество будет дата 25 декабря, без повторов, закрыта.
Есть два типа запросов, которые он должен обрабатывать: "открываем ли мы эту дату" и "сколько раз мы открываем между этими датами". Если таблица была заполнена без повторов, это были бы полностью мирские запросы, и я хотел бы сделать выбор, который создает строки, как если бы они были введены без ручек без повторений, т.е.
SELECT * from (
SELECT schedStart, schedEnd from tblSchedule
where schedStart between ('2001-01-01', '2001-12-31')
and *expand_ranges_into_non_repeating_rows_here*)
)
Проблема в том, что SQL - это вопрос о фильтрации информации, а не ее расширении, поэтому создание нескольких строк из одного не совсем нормально. Я мог бы использовать цикл while для создания временной таблицы, но это график для нескольких элементов по всей системе, поэтому он будет часто выполняться много, хотя некоторые диапазоны дат более распространены, чем другие.
Есть идеи? Бонус, если мы сможем сохранить решение как стандартное sql, насколько это возможно.
Изменение: я полагаю, что вопрос может быть еще более упрощен и абстрагирован на "Как создать последовательность строк без использования таблицы".
Хм. Кажется, я отозвал вопрос. Я пробовал рекурсивные представления, некоторые из которых могут быть возможны с использованием новой функции cte для MySQL, но расчеты были слишком трудоемкими (например, по модулю по дням, делая индексы бесполезными). Я решил пойти с расширением их во временную таблицу в начале прогона.
Я бы удалил вопрос, но я думаю, что неудачные попытки так же полезны, как и успешные. Если кто-то хочет продолжить эту дискуссию, не стесняйтесь.
recurring events SQL
или аналогичные. Один из них может помочь вам. Например, stackoverflow.com/questions/14230380/… , stackoverflow.com/questions/9277834/recurring-events-sql-query