tbl_emails_sent
というセカンダリテーブルの最新のレコードを必要とするクエリがあります。
このテーブルには、クライアントに送信されるすべての電子メールが保持されます。そして、ほとんどのクライアントには数件から数百件のメールが記録されています。最新を表示するクエリを取得したい。
例:
SELECT c.name, c.email, e.datesent
FROM `tbl_customers` c
LEFT JOIN `tbl_emails_sent` e ON c.customerid = e.customerid
サブクエリを使用したLEFT JOINが使用されると思いますが、サブクエリについてはあまり掘り下げていません。私は正しい方向に進んでいますか?
現在、上記のクエリはテーブル内の最新のレコードを指定するために最適化されていないため、少し支援が必要です。
これは次のようになります。メールが送信された最大日付(または最新日付)を取得するには、別のクエリが必要です。
SELECT a.*, b.*
FROM tbl_customers a
INNER JOIN tbl_emails_sent b
ON a.customerid = b.customerid
INNER JOIN
(
SELECT customerid, MAX(datesent) maxSent
FROM tbl_emails_sent
GROUP BY customerid
) c ON c.customerid = b.customerid AND
c.maxSent = b.datesent
これは機能しませんか?
SELECT t1.datesent,t1.customerid,t2.email,t2.name
FROM
(SELECT max(datesent) AS datesent,customerid
FROM `tbl_emails_sent`
) as t1
INNER JOIN `tbl_customers` as t2
ON t1.customerid=t2.customerid
あなたが持っている唯一の問題は、2つの日付が同じ場合、1つが選ばれる決定要因は何ですか?