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

标签 mysql sql database join

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

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:获取按字段分组的具有最大值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34087392/

相关文章:

SQL Server 差异 : Web Edition vs Express Edition With Advanced Series

sql - 使用 bash 管道而不是 select 语句

Java 1.6 和 Oracle JDBC 14 setQueryTimeout 不工作

python - 每次在 django 中创建另一行时创建一行

mysql - 在 MySQL 中创建存储过程

mysql - 如何为每个唯一字段仅选择 1 行(在重复的情况下由另一个字段确定哪个字段)

sql - SQL按字符串的中间部分分组

php - 我想要带有 where 条件的 sql 列的最后一个值

php - CodeIgniter/PHP Active Record 不会递增整数

php - 如何使这个查询发生