#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 минут. И, по крайней мере, по моему опыту, такая таблица часто используется повторно, особенно если вы делаете какие-либо бизнес-отчеты со своими данными.