Попробуйте просто использовать 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.