20

というセカンダリ テーブルの最新のレコードを必要とするクエリがあります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 が使用されると推測していますが、サブクエリについてはあまり詳しく説明していません。私は正しい方向に進んでいますか?

現在、上記のクエリは、テーブル内の最新のレコードを指定するように最適化されていないため、少し支援が必要です。

4

2 に答える 2

38

これは次のようになります。電子メールが送信された最大日(または最新の日付)を取得するには、別のクエリが必要です。

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
于 2012-09-06T23:42:25.480 に答える
2

これはうまくいきませんか?

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つのdatesentが同じである場合、どちらが選択されるかを決定する要因は何ですか?

于 2012-09-07T00:06:57.150 に答える