получите все даты, которые лежат между двумя столбцами дат, добавив частоту (третий столбец) в виде месяца | mysql

#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
  

скрипка