Mysql 按周分组并从当前周中选择记录

Mysql 按周分组并从当前周中选择记录,mysql,datetime,group-by,Mysql,Datetime,Group By,我一直在尝试使用MySQL显示每周销售额的结果表,其中每周的结果如下: Sun - Mon - Tues - Wed - Thur - Fri - Sat 所以我继续使用这个查询: SELECT DATE_FORMAT(cart_calendar.datefield, '%d-%b') AS DATE , IFNULL(SUM(cart_daily_sales.quantity),0) AS total_sales FROM cart_daily_sales RIGHT J

我一直在尝试使用MySQL显示每周销售额的结果表,其中每周的结果如下:

Sun - Mon - Tues - Wed - Thur - Fri - Sat
所以我继续使用这个查询:

SELECT DATE_FORMAT(cart_calendar.datefield, '%d-%b') AS DATE
        , IFNULL(SUM(cart_daily_sales.quantity),0) AS total_sales 
FROM cart_daily_sales 
RIGHT JOIN cart_calendar 
         ON (DATE(cart_daily_sales.order_date) = cart_calendar.datefield)
WHERE (cart_calendar.datefield) 
GROUP BY WEEK(cart_calendar.datefield)
我知道我就快到了,因为这输出了一年中所有的52周,我只想要当前一周的结果,不像上面的代码那样,结果是这个

'02-Jan', '09-Jan', '16-Jan', '23-Jan', '30-Jan', '06-Feb', '13-Feb', '20-Feb', '27-Feb', '06-Mar' e.t.c....
我知道我可以对今天的日期和之后的-7天使用BETWEEN操作符,但这不会显示当前的一周,如果今天是星期三,它将显示最后七天到最后一周星期三,而不是正确的周结构

如何显示上周的每周销售分组

 SELECT DATE_FORMAT(cc.datefield, '%d-%b') AS DATE
        , SUM(IFNULL(cds.quantity,0)) AS total_sales 
 FROM cart_calendar cc
 INNER JOIN cart_daily_sales cds
         ON (DATE(cds.order_date) = cc.datefield)
 WHERE WEEK(cc.datefield) = WEEK(now())
 GROUP BY WEEK(cc.datefield)
或者,如果您每天都需要它:

 SELECT DATE_FORMAT(cc.datefield, '%d-%b') AS DATE
        , SUM(IFNULL(cds.quantity,0)) AS total_sales 
 FROM cart_calendar cc
 INNER JOIN cart_daily_sales cds
         ON (DATE(cds.order_date) = cc.datefield)
 WHERE WEEK(cc.datefield) = WEEK(now())
 GROUP BY MOD(WEEKDAY(cc.datefield)+1,6) WITH ROLLUP

我注意到的最后一件事是在第18周开始时,星期天是这样结束的:['19-Sep','20-Sep','21-Sep','22-Sep','23-Sep','24-Sep','18-Sep']我怎样才能把9月18日提前?@Matt,weekday()坚持星期一是一周的第一天,而不像week()把星期天视为第一天。用一个额外的
mod
子句为ya修复了它。