このクエリを実行しています。
SELECT
t1.quantity,
t2.transaction_date,
t1.product_id
FROM
ezsystem_usah.invoice_line AS t1
INNER JOIN ezsystem_usah.invoices AS t2
ON t1.invoice_id = t2.id_invoices
WHERE
t2.customer_id = '8000004C-1325619329'
AND ( product_id = '8000016F-1325198704'
OR product_id = '80000027-1324422404' OR ...);
結果のテーブルは次のとおりです。
quantity | transaction_date | product_id
7 2012-01-04 8000016F-1325198704
8 2012-03-05 8000016F-1325198704
1 2012-01-05 11111111-1324422404
... ... ...
次のような結果を得るために、特定の product_id の MAX(transaction_date) に基づいて行を選択したいと思います。
quantity | transaction_date | product_id
8 2012-03-05 8000016F-1325198704
1 2012-01-05 11111111-1324422404
つまり、結合されたテーブルから、各製品 ID の最新のエントリを選択したいということです。
私が試してみました:
SELECT
t1.quantity,
MAX(t2.transaction_date),
t1.product_id
FROM
ezsystem_usah.invoice_line AS t1
INNER JOIN ezsystem_usah.invoices AS t2 ON t1.invoice_id = t2.id_invoices
WHERE
t2.customer_id = '8000004C-1325619329'
AND (product_id = '8000016F-1325198704' OR product_id = '80000027-1324422404' OR ...)
GROUP BY
t1.product_id;
ただし、数量が間違っています。
私が試していない別の方法は、 を使用するHAVING MAX(transaction_date) = ([sub query])
ことですが、コストがかかるようです。
最悪の場合、商品ごとに1つずつクエリを実行することもできますが、できればそれは避けたいです。
ありがとう、デーン