我有一个SQL查询,可以检索最近7个月的付款,计算总和,并根据相关月份对它们进行分组......
查询的唯一问题是,由于某种原因,在每个月的31日,它会混乱。为了不那么模糊,而不是过去7个月(应该排除当前月份),它会把当前月份当作上个月(就好像我们已经在1月份,而今天的实际日期是31个月) 12月)。
SELECT DATE(date) AS month, SUM(amount_paid) AS amount FROM payments WHERE date > DATE_SUB(NOW(), INTERVAL 7 MONTH) GROUP BY YEAR(date), MONTH(date)");
所以要打破这个,结果应该是这样的:
0 => 2013-05-01
1 => 2013-06-03
2 => 2013-07-01
3 => 2013-08-01
4 => 2013-09-02
5 => 2013-10-01
6 => 2013-11-01
然而,结果如下:
0 => 2013-06-03
1 => 2013-07-01
2 => 2013-08-01
3 => 2013-09-02
4 => 2013-10-01
5 => 2013-11-01
6 => 2013-12-02
我想说我发现了MySQL date_sub的一个错误,但我知道查询中某处有错误。而且,今天是12月31日,它只发生在任何一个月的第31天。
干杯!
答案 0 :(得分:0)
仍在努力为你解答,但我想知道它是否与此有关:
“如果您添加MONTH,YEAR_MONTH或YEAR,并且结果日期的日期大于新月份的最大日期,则将该日期调整为新月份的最大天数”
mysql> SELECT DATE_ADD('2009-01-30', INTERVAL 1 MONTH);
-> '2009-02-28'
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add
答案 1 :(得分:0)
所以我认为以下答案是礼貌的:Get the values for last 6 months in mysql
这是我的MYSQL查询现在的样子。它很乱,我觉得DATE_SUB应该仍然可以完成这项工作但是:
SELECT DATE(date) AS month, SUM(amount_paid) AS amount
FROM
payments
WHERE
DATE_FORMAT(date,'%Y-%m') < DATE_FORMAT(NOW(),'%Y-%m')
AND
DATE_FORMAT(date,'%Y-%m') >= DATE_FORMAT(NOW() - INTERVAL 7 MONTH,'%Y-%m')
GROUP BY
YEAR(date), MONTH(date)