Подзапрос 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 с подзапросом будет использоваться, но я не очень разбираюсь в подзапросах. Я иду в правильном направлении?
В настоящее время указанный выше запрос не оптимизирован для указания самой последней записи в таблице, поэтому мне нужна небольшая помощь.
Ответы
Ответ 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
Только вы имеете в виду, что если две даты одинаковы, то какой решающий фактор вы выбрали?