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

Помогите?

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

Ответы:


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 года для вычисления любой недели, начинающейся и заканчивающейся в любой день .


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.