我在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月以后的数据或月份不同的年份有关?
由于
答案 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子句来处理两个值之间的月份?我敢打赌,如果你改变这一点来处理纯粹的约会你应该没事。