左join+order-by-before-group-by

ki1q1bka  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(273)

这个问题在这里已经有答案了

按组选择每组中的第一行(17个答案)
两年前关门了。
我有两张table:公司和电子邮件。
我想选择每个公司的最后一封电子邮件
我试过这个:

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;

但这不起作用,按部分排序应该以某种方式先于按部分分组,因为我想得到每个公司的最后一封电子邮件,而不是排序最终结果。
有人能帮我吗?
谢谢。
更新
最后我做了这个:

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;

谢谢你的帮助。

2exbekwf

2exbekwf1#

如果我能正确理解你的问题,我想这样的办法可以奏效。

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答案

相关问题