MySQL - расширение диапазона дат на отдельные даты

0

У меня есть таблица с датой начала и повторным подсчетом (упрощена):

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, насколько это возможно.

Изменение: я полагаю, что вопрос может быть еще более упрощен и абстрагирован на "Как создать последовательность строк без использования таблицы".

  • 0
    Подобных вопросов уже довольно много, если вы ищете в Google recurring events SQL или аналогичные. Один из них может помочь вам. Например, stackoverflow.com/questions/14230380/… , stackoverflow.com/questions/9277834/recurring-events-sql-query
  • 0
    Оба из них (и все те, которые я нашел) возвращают, происходит ли одно повторное событие, а не сколько раз и, что не менее важно, когда. Это расширение одной повторяющейся строки на несколько одноразовых событий в запросе (т. Е. Не объединение с реальной физической таблицей), которую я пытаюсь решить. Дает ли я пищу для размышлений, хотя?
Показать ещё 1 комментарий
Теги:
date

1 ответ

0

Хм. Кажется, я отозвал вопрос. Я пробовал рекурсивные представления, некоторые из которых могут быть возможны с использованием новой функции cte для MySQL, но расчеты были слишком трудоемкими (например, по модулю по дням, делая индексы бесполезными). Я решил пойти с расширением их во временную таблицу в начале прогона.

Я бы удалил вопрос, но я думаю, что неудачные попытки так же полезны, как и успешные. Если кто-то хочет продолжить эту дискуссию, не стесняйтесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню