0

我在这个 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 月有关,它落在不同的年份并导致某种问题,但我不确定。有谁知道为什么再搜索一个月不会返回任何结果?是否与一月之后没有数据有关,或者月份是不同年份的?

谢谢

4

2 回答 2

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 个月进行查询。

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

于 2012-09-28T01:23:43.067 回答
0

您是否尝试过更改处理两个值之间月份的 where 子句?我敢打赌,如果你把它改成只处理纯日期,你应该没问题。

于 2012-09-28T01:26:33.700 回答