mysql - GROUP BY 之前的 LEFT JOIN + ORDER BY

标签 mysql group-by left-join sql-order-by

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

我想选择每家公司的最后一封电子邮件

我尝试过这个:

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/

相关文章:

r - left_join 在 R 中的 by 参数中使用字符向量

php - 从PHP发送可变长度的数据到SQL表,有更好的方法吗?

php - 模型上的 find() 在一个环境中将 id 给出为字符串,在其他环境中给出 int

php - 从 INSERT IGNORE 语句获取多个插入 ID

mysql - 将多个计数合并为一个查询 - 分组依据

python - 在 Pandas 中分组

php - 将数据传递到另一个页面

sql - 将不在聚合函数中的列保留在 group by 语句中

mysql - 两个带左连接的计数相乘

mysql - MySQL 查询的最大 CPU 使用率和超过 60 秒的执行