MySQL SUM查询一周问题的每日值

时间:2010-03-31 16:38:03

标签: sql mysql

我试图在mysql中返回一周中每一天的总和,但是尽管有 2010年3月第3周的值

,它仍然没有返回任何内容
SELECT SUM(expense_details_amount) AS total 
  FROM expense_details
WHERE YEAR(expense_details_date) = '2010'                   
  AND MONTH(expense_details_date) = '03'
  AND WEEK(expense_details_date) = '3'
GROUP BY DAY(expense_details_date)

我该怎么做?

3 个答案:

答案 0 :(得分:1)

根据WEEK的{​​{3}}:

  

此函数返回日期的周数。 WEEK()的双参数形式允许您指定周是在星期日或星期一开始,以及返回值是否应该在0到53或1到53的范围内。如果省略mode参数,则值使用default_week_format系统变量。请参见第5.1.4节“服务器系统变量”。

他们的例子是:

mysql> SELECT WEEK('2008-02-20');
        -> 7
mysql> SELECT WEEK('2008-02-20',0);
        -> 7
mysql> SELECT WEEK('2008-02-20',1);
        -> 8
mysql> SELECT WEEK('2008-12-31',1);
        -> 53

所以你不应该检查第3周,但是一年中的任何一周都是3月的第3周。

看起来这些函数也会返回整数而不是字符串,因此您可能希望丢失查询中的单引号。

答案 1 :(得分:0)

您的where子句排除了所有数据,因为一年中的第三周是1月份,您还指定了月份为3月。尝试使用表单的where子句:

WHERE expense_details_date BETWEEN '2010-03-15' AND '2010-03-22'

答案 2 :(得分:0)

WEEK()实际上与WEEKOFYEAR()类似,而不是WEEKOFMONTH(),因此默认情况下它会将值0到53作为结果。

如果您说该月的第一周是前7天,而不是从第一个星期日开始,那么您可以使用DAYOFMONTH()BETWEEN来获得第三周:

SELECT SUM(expense_details_amount) AS total 
  FROM expense_details
WHERE YEAR(expense_details_date) = 2010
  AND MONTH(expense_details_date) = 3
  AND DAYOFMONTH(expense_details_date) BETWEEN 15 AND 21
GROUP BY DAYOFMONTH(expense_details_date)

请注意,我还将常量更改为数字而不是字符串,因此MySQL不必进行转换。