MySQL получить количество записей в каждый день между двумя указанными датами - PullRequest
0 голосов
/ 11 марта 2020

Я пишу этот запрос, где он получает значение строки, и он будет возвращать количество записей для каждого дня для этой строки между двумя указанными датами и возвращает 0, если для этого дня нет записей.

Я написал запрос, который делает это на прошлой неделе.

Текущий запрос:

select d.day, count(e.event) as count
                      from ( 
                            select 0 day union all 
                            select 1 union all 
                            select 2 union all 
                            select 3 union all 
                            select 4 union all
                            select 5 union all 
                            select 6 
                           ) d 
                      left join event e
                           on e.timestamp >= current_date - interval d.day day
                           and e.timestamp < current_date - interval (d.day - 1) day 
                           and e.event = ?
                      group by d.day

Проблема в том, что это возвращает только результаты за фиксированное количество дней. Я хочу иметь возможность назначить ему две даты (даты начала и окончания) и получить количество записей за каждый день, когда я не знаю число дат между ними.

1 Ответ

1 голос
/ 11 марта 2020

Вы можете использовать / создать подлинную календарную таблицу. Примерно так:

SELECT
    d.day,
    COUNT(e.timestamp) AS cnt
FROM
(
    SELECT '2020-01-01' AS day UNION ALL
    SELECT '2020-01-02' UNION ALL
    ...
    SELECT '2020-12-31'
) d
LEFT JOIN event e
    ON e.timestamp >= d.day AND e.timestamp < DATE_ADD(d.day, INTERVAL 1 DAY)
WHERE
    d.day BETWEEN <start_date> AND <end_date>
GROUP BY
    d.day;

Я охватил только календарный 2020 год, но вы можете расширить охват до любого диапазона.

...