過去 3 か月間の毎日の「プロット」売上を示すレポートを実行しようとしていますが、SUM() を正しく合計するのに苦労しています。1 つの Transaction_ID が複数の Plot レコードにまたがる場合があります。以下のクエリでは、同じ Transaction_ID を持つ 2 つのプロットがある場合、それらが一緒に追加されますが、これは私が望むものではありません。SUM() 内でトランザクション行を 1 回だけ使用する必要があります。
SELECT
DATE_FORMAT(Transactions.CreateDate,'%m-%d') AS MonthAndDay,
DATE_FORMAT(Transactions.CreateDate,'%M, %D') AS Day,
SUM(Transactions.AmountTotal) AS DailySales
FROM
Transactions,
Plots
WHERE
Transactions.Transaction_ID = Plots.Transaction_ID AND
Transactions.CreateDate <= CURDATE() AND
Transactions.CreateDate >= DATE_SUB(CURDATE(),INTERVAL 3 MONTH)
GROUP BY
MonthAndDay
ORDER BY
MonthAndDay ASC
テーブル構造は次のようになります。
+-----------------------------------+----------------------------------------------------------------------------------------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------------------+----------------------------------------------------------------------------------------------------+------+-----+---------------------+----------------+
| Transaction_ID | int(11) | NO | PRI | NULL | auto_increment |
| CreateDate | datetime | NO | | 0000-00-00 00:00:00 | |
| AmountTotal | decimal(10,2) | NO | | 0.00 | |
+-----------------------------------+----------------------------------------------------------------------------------------------------+------+-----+---------------------+----------------+
+------------------------+-------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-------------+------+-----+---------------------+----------------+
| Plot_ID | int(11) | NO | PRI | NULL | auto_increment |
| Transaction_ID | int(11) | YES | MUL | NULL | |
| Plot | varchar(10) | NO | | 0 | |
+------------------------+-------------+------+-----+---------------------+----------------+