假设我有一个这样的表消息:

id  sender  receiver  content  created_at
1    100       101    Hi        2015-12-01
2    100       101    Hello     2015-12-02
3    100       101    World     2015-11-02
4    103       101    Like      2015-11-05
5    103       101    Do        2015-11-04
6    105       102   ..................


指定了接收方后,我想从每个用户(即用户101)获取最新消息和消息数:

2    100       101    Hello     2015-12-02     3
4    103       101    Like      2015-11-05     2


是否可以通过一个语句来完成此操作,或者最优雅的方法是什么?

最佳答案

在子查询中汇总101的信息,然后将其重新连接到原始表:

select m.*, mm.maxca
from messages m join
     (select m2.receiver, max(m2.created_at) as maxca, count(*) as cnt
      from messages m2
      where m2.receiver = 101
     ) mm
     on m.receiver = mm.receiver and m.created_at = mm.created_at
where m.receiver = 101 ;

关于mysql - Mysql:获取具有按字段分组的最大值的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34087392/

10-12 07:05