LEFT JOIN + ORDER BY 在 GROUP BY 之前

LEFT JOIN + ORDER BY before GROUP BY

我有两个表:公司和电子邮件。

我要select每个公司的最后一封邮件

我试过这个:

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';

编辑:更新 Thorsten 的回答