Как создать несколько строк из одной строки с интервалом времени в MySQL

#mysql

#mysql

Вопрос:

У меня есть таблица с start_date, end_date и frequency. Используя запрос MySQL, я хочу сгенерировать несколько строк с каждой датой между start_date и end_date. Вот таблицы:

 ID | start_date |  end_date  | frequency
----------------------------------------
 1 | 1402876800 | 1403049600 | daily
  

Теперь я хочу, чтобы вывод запроса выглядел следующим образом:

 active_date | start_date |  end_date  | frequency
--------------------------------------------------
 1402876800 | 1402876800 | 1403049600 | daily
 1402963200 | 1402876800 | 1403049600 | daily
 1403049600 | 1402876800 | 1403049600 | daily
  

Все даты указаны в значении метки времени.

Заранее спасибо.

Комментарии:

1. в любом случае, что делать только с 1 таблицей?

2. Не получил ни одной. Но с помощью процедуры, надеюсь, это достижимо.

Ответ №1:

Самый простой способ — создать таблицу дат и присоединиться к ней, используя условие between, например,

 SELECT d.date AS active_date, t.start_date, t.end_date, t.frequency
FROM {your_table} AS t
INNER JOIN {date_lookup_table} AS d
ON d.date BETWEEN t.start_date AND t.end_date
  

Вы также можете использовать процедуру для вычисления этого… Но, по моему опыту, наличие таблицы поиска даты в целом довольно полезно, особенно если вы делаете такие вещи, как добавление к ней месяца и года. И это определенно намного проще в использовании и устранении неполадок. Если бы это был я, я бы добавил таблицу поиска даты, убедился, что у нее есть индекс по дате, и двигался дальше.

Комментарии:

1. Спасибо за решение. Но какова будет структура для date_lookup_table? Поскольку эта таблица содержит значение года, нужно ли мне запускать задание cron для предстоящих дат?

2. На моем месте я бы создал таблицу с указанием даты, времени, даты {гггг-мм-дд}, месяца {1, 2, 3 и т. Д.}, Квартала {1, 2 и т. Д.}, Года {1970, 1971 и т. Д.}. Вместо задания cron я бы просто сгенерировал все это в Excel и перешел с 1970 на (скажем) 2100. Импортируйте его в MySQL. Добавьте индекс к каждому столбцу. Создание этой таблицы, импорт ее в SQL и добавление столбцов заняло бы около 10 минут. И, по крайней мере, по моему опыту, такая таблица часто используется повторно, особенно если вы делаете какие-либо бизнес-отчеты со своими данными.