1 か月間注文がなかった場合は、ギャップを 0 で埋める必要があります。
テーブルの例:
date product
2010-02-01 20
2010-03-01 10
2010-03-01 30
2010-06-01 15
私の基本的なクエリは次のとおりです。
SELECT date,SUM(orders.product) AS product
FROM orders
GROUP BY month(date),YEAR(date)
それは次を返します:
date product
2010-02-01 20
2010-03-01 40
2010-06-01 15
しかし、私は必要です:
date product
2010-02-01 20
2010-03-01 40
2010-04-01 0
2010-05-01 0
2010-06-01 15
可能なすべての日付を含む表を作成しました。
datefield
2010-01-01
2010-02-01
2010-03-01
2010-04-01
2010-05-01
2010-06-01
2010-07-01
etc...
しかし、2つに参加しようとするとうまくいきません。(編集: 最初の欠落している月でのみ機能します。)
SELECT calendar.datefield AS DATE,
IFNULL(SUM(orders.product),0) AS product
FROM orders RIGHT JOIN calendar ON (MONTH(orders.date) = MONTH(calendar.datefield)) AND (YEAR(orders.date) = YEAR(calendar.datefield))
WHERE (calendar.datefield BETWEEN (SELECT MIN(DATE(date)) FROM orders) AND (SELECT MAX(DATE(date)) FROM orders))
GROUP BY DATE