SQL-запрос, чтобы получить последний день каждой недели

8

Используя MySQL, мне нужно запросить таблицу с полем datetime. Мне нужно посчитать все записи за конкретную неделю. Использование date_format (colname, "% Y% V") возвращает номер недели, но мне нужен последний день (день месяца 01-28 | 29 | 30 | 31) для этой недели.

Выход, например

    СЧЕТ (*) | Дата
    11 | 2012-01-07
    22 | 2012-01-14
    123 | 2012-01-21

Помогите?

Примечание: последний день недели в моем случае - воскресенье.

randomx
источник

Ответы:

12

Вам нужно использовать функцию DAYOFWEEK

Если конец недели в субботу, любая дата может быть преобразована в субботу.

Например, это вычисляет предстоящую субботу

SELECT DATE(NOW() + INTERVAL (7 - DAYOFWEEK(NOW())) DAY);

Это вычисляет предстоящее воскресенье ( вместо этого вы должны использовать функцию WEEKDAY )

SELECT DATE(NOW() + INTERVAL (6 - WEEKDAY(NOW())) DAY); 

Для таблицы с именем mytable и столбцом даты с именем theDate ваше суммирование будет

суббота

SELECT COUNT(1) DateCount,EndOfWeekDate FROM
(
    SELECT DATE(theDate + INTERVAL (7 - DAYOFWEEK(theDate)) DAY) EndOfWeekDate
    FROM mytable
) A GROUP BY EndOfWeekDate;

Воскресенье

SELECT COUNT(1) DateCount,EndOfWeekDate FROM
(
    SELECT DATE(theDate + INTERVAL (6 - WEEKDAY(theDate)) DAY) EndOfWeekDate
    FROM mytable
) A GROUP BY EndOfWeekDate;

Попробуйте!

ПРЕДУПРЕЖДАЙТЕ, если вы хотите любой другой конец недели, кроме субботы и воскресенья, я написал безумный алгоритм еще 22 сентября 2011 года для вычисления любой недели, начинающейся и заканчивающейся в любой день .

RolandoMySQLDBA
источник
1

Использование LAST_DAY().

Документация здесь .

Philᵀᴹ
источник
2
Возвращает последний день месяца , а не неделю.
Дэнни Беккет