繁体   English   中英

Mysql:获取具有按字段分组的最大值的行

[英]Mysql: Get the rows with max value grouped by a field

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

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 ;

这里的想法是获取最新记录,可以通过created_at进行排序,然后使用group by来获得计数。

SELECT a.id,a.sender,a.receiver,a.content,a.created_at,count(a.sender) from (Select  * from messages order by created_at desc) a  group by sender  ;
   SELECT x.*
        , y.total 
     FROM my_table x 
     JOIN 
        ( SELECT receiver
               , sender
               , MAX(created_at) max_created_at
               , COUNT(*) total 
            FROM my_table 
           GROUP 
              BY receiver
               , sender
        ) y 
       ON y.receiver = x.receiver 
      AND y.sender = x.sender 
      AND y.max_created_at = x.created_at
-- [WHERE receiver = 101]
        ;
+----+--------+----------+---------+------------+-------+
| id | sender | receiver | content | created_at | total |
+----+--------+----------+---------+------------+-------+
|  2 |    100 |      101 | Hello   | 2015-12-02 |     3 |
|  4 |    103 |      101 | Like    | 2015-11-05 |     2 |
|  6 |    105 |      102 | Re      | 2015-11-04 |     1 |
+----+--------+----------+---------+------------+-------+

http://www.sqlfiddle.com/#!9/3fef7/1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM