показывать дни с 0 записями в запросе mysql при группировании по дате - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть таблица идентификаторов и дат. таблица выглядит так:

id | Дата

5 | 2020-04-01

6 | 2020-04-06

7 | 2020-04-11

8 | 2020-04-11

Я хочу сгруппировать по дате, поэтому я использовал это:

select Date,count(id) from Table where Date between '2020-04-01' AND '2020-04-30' group by Date

, и я получаю это:

Дата | количество (id)

2020-04-01 | 1

2020-04-06 | 1

2020-04-11 | 2

мне нужен просто наполнитель для пустых дней месяца. поэтому вместо результата мне нужно, чтобы таблица включала все дни с 0 записями, вот так:

Дата | количество (id)

2020-04-01 | 1

2020-04-02 | 0

2020-04-03 | 0

2020-04-04 | 0

2020-04-05 | 0

2020-04-06 | 1

... et c

есть ли способ в mysql показать дни с 0 записями?

1 Ответ

1 голос
/ 27 апреля 2020

Если вы используете MySQL 8.0, вы можете использовать рекурсивный запрос, чтобы сгенерировать список дней для текущего месяца, а затем привести таблицу с left join и агрегировать:

with recursive cte as (
    select 
        date_format(current_date, '%Y-%m-01') dt, 
        date_format(current_date, '%Y-%m-01') + interval 1 month end_dt
    union all
    select dt + interval 1 day, end_dt from cte where dt < end_dt
)
select c.dt, count(t.id)
from cte c
left join mytable t on t.date = c.dt
group by c.dt
...