Выберите из диапазона дат в MySQL - PullRequest
1 голос
/ 03 апреля 2020

Можно ли выбрать диапазон дат, в котором каждая дата представляет собой одну строку?
Я хотел бы сделать что-то вроде этого псевдокода:

SELECT date from dual where date >= "2019-01-01" AND date <= "2019-01-05"

И результаты должны быть единичными. столбец со значениями:

2019-01-01
2019-01-02
2019-01-03
2019-01-04
2019-01-05

Возможно ли это даже в MySQL?

Ответы [ 2 ]

2 голосов
/ 03 апреля 2020

В MySQL 8.0 вы можете сделать это с помощью рекурсивного запроса:

with recursive cte as (
    select '2019-01-01' dt
    union all select dt + interval 1 day from cte where dt < '2019-01-05'
)
select dt from cte order by dt

Демонстрация на DB Fiddle :

| dt         |
| :--------- |
| 2019-01-01 |
| 2019-01-02 |
| 2019-01-03 |
| 2019-01-04 |
| 2019-01-05 |

В более ранних версиях решения обычно включали таблицу чисел, которая содержит последовательные целые числа, начинающиеся с 0.

create table mynumbers (n int);
insert into mynumbers values(1), (2), (3), (4), (5);

select '2019-01-01' + interval n day dt
from mynumbers n
where '2019-01-01' + interval n day <= '2019-01-05'

Демонстрация

Примечание: если вам нужно сгенерировать очень большой набор данных, решение «таблица чисел» более эффективно, чем рекурсивный запрос.

0 голосов
/ 03 апреля 2020

Вы можете попробовать что-то вроде

SELECT date from dual 
where date >= (SELECT min(a.date) from DatesTable a) 
AND date <= (SELECT max(b.date) from DatesTable b)

ИЛИ

    SELECT date from dual 
    where date BETWEEN  (SELECT min(a.date) from DatesTable a) 
                         AND 
                        (SELECT max(b.date) from DatesTable b)

Вы также можете добавить некоторые условия (с помощью предложения WHERE) в подзапросы для отражения различных ситуаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...