Принятый ответ может быть немного упрощен и обеспечивает большую гибкость. Обратите внимание, что this_sunday
включает сам день, если это воскресенье.
SELECT
DATE(created_at, 'weekday 0') AS this_sunday,
COUNT(*) AS rows_this_week
FROM my_table
GROUP BY this_sunday;
Этот метод проще, чем strftime('%W', created_at)
, и он более мощный. Например, если вы хотите объединить недели, заканчивающиеся в понедельник:
SELECT
DATE(created_at, 'weekday 1') AS this_monday,
COUNT(*) AS rows_this_week
FROM my_table
GROUP BY this_monday;
Это работает благодаря модификатору 'weekday N'
, который перемещает дату на указанный день недели, если она в будущем, или сохраняет ее, если это тот же день.
Наконец, чтобы проверить, какие даты включены в диапазон вашей недели, я рекомендую этот метод:
SELECT
DATE(created_at, 'weekday 1') AS this_monday,
MIN(DATE(created_at)) AS earliest,
MAX(DATE(created_at)) AS latest,
COUNT(*) AS rows_this_week
FROM my_table
GROUP BY this_monday;