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月と同じで、別の年になって何らかの問題を引き起こしていることと関係があるのではないかと思いますが、よくわかりません。余分な月を検索しても結果が返されない理由を誰かが知っていますか?1月以降のデータがないことと関係があるのでしょうか、それとも別の年の月であるのでしょうか。

ありがとう

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

2つの値の間にある月を扱うwhere句を変更してみましたか?あなたがそれを純粋な日付だけを扱うように変えるなら、あなたは大丈夫なはずです。

于 2012-09-28T01:26:33.700 に答える