как получить недели ч / б две даты как week1, week2, week3 в mysql - PullRequest
1 голос
/ 05 мая 2020

SELECT COUNT (order_id) AS xAxis, WEEK (created_at) AS yAxis FROM orders WHERE created_at> = startDate AND created_at <= endDate GROUP BY WEEK (created_at); </p>

1 Ответ

0 голосов
/ 05 мая 2020

Попробуйте просто использовать MIN и MAX:

SELECT
    COUNT(order_id) AS xAxis,
    WEEK(created_at) AS yAxis,
    MIN(created_at) AS week_start,
    MAX(created_at) AS week_end
FROM orders
WHERE
    created_at BETWEEN startDate AND endDate
GROUP BY
    WEEK(created_at);

Аргументация здесь проста: начало каждой недельной группы записей должно быть наименьшей датой и наоборот для макс.

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

SELECT
    COUNT(o.order_id) AS xAxis,
    WEEK(t.dt) AS yAxis,
    MIN(t.dt) AS week_start,
    MAX(t.dt) AS week_end
FROM
(
    SELECT '2020-01-01' AS dt UNION ALL
    SELECT '2020-01-02' UNION ALL
    ...
    SELECT '2020-12-31'
) t
LEFT JOIN orders o
    ON t.dt = o.created_at
WHERE
    o.created_at BETWEEN startDate AND endDate
GROUP BY
    WEEK(t.dt);

См. Здесь для получения дополнительной информации о создании таблиц дат в MySQL.

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