2012-09-28 39 views
0

我在这个MySQL查询中收到了一个奇怪的结果。SQL SELECT和GROUP BY Month在9个月以上没有返回结果

我试图返回'订单',按月分组。

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 

当我运行查询现在个月前,我得到这样的结果之间拿到订单:

================== 
| 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个月前等同于12月有关,它会落在不同的年份并引起某种问题,但我不确定。有没有人有任何想法为什么搜索一个额外的月份会返回没有结果?除了Jan之外没有数据,或者这个月是不同的一年?

感谢

回答

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

的解决方案是,你需要包括今年在查询中为好,而不是仅仅的数月。

+0

啊,这是问题所在。我没有想到把它分解成它正在做的实际数学。谢谢! – mattCreative

0

您是否尝试更改where子句处理两个值之间的月份?我敢打赌,如果你改变这种情况,只处理纯粹的日期,你应该没问题。