我有两个表:公司和电子邮件。
我想选择每家公司的最后一封电子邮件
我尝试过这个:
SELECT *
FROM companies
LEFT
JOIN emails
ON companies.company_id = emails.company_id
WHERE companies.status = 'active'
GROUP
BY emails.company_id
ORDER
BY emails.date DESC;
但这不起作用,ORDER BY 部分应该以某种方式先于 GROUP BY 部分,因为我想获取每家公司的最后一封电子邮件,而不是对最终结果进行排序。
有人可以帮助我吗?
谢谢。
更新
我最终这样做了:
SELECT *
FROM companies
LEFT
JOIN (
SELECT company_id, date
FROM emails
ORDER
BY date DESC
) emails
ON companies.company_id = emails.company_id
WHERE companies.status = 'active'
GROUP
BY emails.company_id;
感谢您的帮助。
最佳答案
如果我以正确的方式理解你的问题,我认为类似的事情可能会起作用。
SELECT * FROM companies c
LEFT JOIN emails e ON c.company_id = e.company_id
AND (e.company_id, e.date) IN (
SELECT company_id, max(date) FROM emails GROUP BY company_id
)
WHERE c.status = 'active';
编辑:更新托尔斯滕答案
关于mysql - GROUP BY 之前的 LEFT JOIN + ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50157932/