SQL SELECT和GROUP BY Month在9个月以上没有返回任何结果

时间:2012-09-28 01:18:40

标签: php mysql date

我在MySQL查询中收到一个奇怪的结果。

我正在尝试按月分组“订单”。

SELECT DATE_FORMAT(date_of_sale, '%b') AS date, SUM(quantity) AS items FROM order_elements JOIN orders ON order_elements.order_ref = orders.order_id WHERE cur_status = 1 AND quantity > 0 AND MONTH(date_of_sale) BETWEEN MONTH(CURDATE() - INTERVAL 8 MONTH) AND MONTH(NOW()) GROUP BY MONTH(date_of_sale) ORDER BY MONTH(date_of_sale) DESC

当我运行查询以在现在和 8 之前获得订单时,我得到了这样的结果:

==================
| date   | items |
==================
| Sep    | 95    |
| Aug    | 110   |
| Jul    | 106   |
| Jun    | 110   |
| May    | 100   |
| Apr    | 130   |
| Mar    | 100   |
| Feb    | 94    |
| Jan    | 7     |
===================
1月30日是我收到订单的最早和第一个日期。其他date_of_sale晚于1月30日。

当我运行相同的查询但从现在到 9 个月之前,我没有得到任何结果。

我认为它可能与9个月之前的某些事情有关,等于12月,它会落到不同的年份并造成某种问题,但我不确定。有没有人知道为什么回溯额外的月份会没有结果?是否与1月以后的数据或月份不同的年份有关?

由于

2 个答案:

答案 0 :(得分:2)

当您查询时:

BETWEEN MONTH(CURDATE() - INTERVAL 9 MONTH) AND MONTH(NOW())

您从第12 - 9月开始查询。因为12大于9,所以没有结果。但是当你查询这个:

BETWEEN MONTH(CURDATE() - INTERVAL 8 MONTH) AND MONTH(NOW())

您从第1 - 9个月开始查询。

解决方案是您还需要在查询中包含年份,而不仅仅是月份数。

答案 1 :(得分:0)

您是否尝试过更改where子句来处理两个值之间的月份?我敢打赌,如果你改变这一点来处理纯粹的约会你应该没事。