Подтвердить что ты не робот

Подзапрос mysql внутри LEFT JOIN

У меня есть запрос, который требует самую последнюю запись из вторичной таблицы под названием 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 с подзапросом будет использоваться, но я не очень разбираюсь в подзапросах. Я иду в правильном направлении?

В настоящее время указанный выше запрос не оптимизирован для указания самой последней записи в таблице, поэтому мне нужна небольшая помощь.

4b9b3361

Ответ 1

Это должно быть так, вам нужно получить отдельный запрос, чтобы получить максимальную дату (или самую последнюю дату), отправленную по электронной почте.

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

Ответ 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

Только вы имеете в виду, что если две даты одинаковы, то какой решающий фактор вы выбрали?