SQL查询以获取每周的最后一天


8

使用MySQL,我需要查询具有datetime字段的表。我需要计算特定一周的所有记录。使用date_format(colname,“%Y%V”)返回星期#,但是我需要该周的最后一天(每月01-28 | 29 | 30 | 31)。

输出例如

    COUNT(*)| 日期
    11 | 2012-01-07
    22 | 2012-01-14
    123 | 2012-01-21

帮帮我?

注意:在我的情况下,一周的最后一天是星期日。

Answers:


12

您需要使用DAYOFWEEK函数

如果在周六结束,则可以将任何日期更改为周六。

例如,此计算即将到来的星期六

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

这将计算即将到来的星期日(您必须使用WEEKDAY函数)

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

对于名为mytable的表,该表的Date列名为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;

试试看 !!!

CAVEAT如果您想要除周六和周日以外的其他任何周末,我早在2011年9月22日就编写了一种疯狂的算法,用于计算任何一天的开始和结束时间


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.