#mysql #date
#mysql #Дата
Вопрос:
У меня есть таблица счетов, и я хочу сгенерировать диапазон дат из двух столбцов на основе третьего столбца (как частота). Или вы можете сказать, что я хочу проверить текущую дату между диапазонами дат, но каждый диапазон дат отличается для каждой строки.
Как вы можете видеть на картинке, у меня есть дата начала, дата окончания и частота. Частота указана в месяцах. У меня есть две строки, и я хочу получить все даты, которые лежат между двумя столбцами дат, добавив частоту (третий столбец) как месяц, но она должна быть меньше или равна столбцу end_date .
Итак, я хочу диапазон дат, как показано ниже
2020-11-23
2020-12-23
2021-01-23
2021-02-23
2021-03-23
2021-04-23
2021-05-23
из-за start_date:- 2020-11-23, end_date:- 2021-06-21 и frequency = 1 в первой строке
и другой диапазон дат, как показано ниже
2020-11-19
2021-01-19
2021-03-19
из-за start_date:- 2020-11-19, end_date:- 2021-03-20 и frequency = 2 во второй строке
Итак, наконец, мне нужно проверить сегодняшнюю дату в указанных выше диапазонах, например
SELECT
id
FROM `invoices`
where CURRENT_DATE in(
'2020-11-23', '2020-12-23', '2021-01-23', '2021-02-23', '2021-03-23', '2021-04-23', '2021-05-23', '2020-11-19', '2021-01-19', '2021-03-19')
Ответ №1:
WITH RECURSIVE
cte AS ( SELECT id, start_date, end_date, frequency
FROM test
UNION ALL
SELECT id, start_date INTERVAL frequency MONTH, end_date, frequency
FROM cte
WHERE start_date <= end_date )
SELECT id, start_date `date`
FROM cte
WHERE start_date <= end_date
ORDER BY 1,2