MySql多个GROUP BY替代方案

问题描述 投票:-1回答:1

我有两张桌子:teamsmessages

teams
========
id | name


messages
============================
id | team_id | created_date

我需要一个如下所示的结果集:

team name  |  number of messages  | most recent message

例如:

Joe Blow's Group   |   23   |   2018-08-29

我最初尝试这个:

select team.id, team.name, count(messages.team_id) as 'Number of 
Messages', messages.created_date as 'Last Message' from messages inner join 
teams on messages.team_id = team.id group by team.name

制作:

Joe Blow's Team   |   23   |   2018-02-14
Bob's Team   |   12   |   2018-04-15

等等

问题是日期是为该团队创建的最早的消息,而不是最近的消息。如果我尝试添加sort by,它只会对此结果集进行排序,但错误的日期。如果我尝试多个'group by',我会为每条消息添加一行。

这需要子查询还是有更简单的方法让created_date成为最新的?

mysql group-by max
1个回答
1
投票

使用MAX函数获取最新的created_date

SELECT group.id, 
       group.name, 
       COUNT(messages.group_id) AS 'Number of Messages', 
       MAX(messages.created_date) AS 'Last Message' 
FROM messages 
INNER JOIN groups ON messages.group_id = group.id 
GROUP BY group.name
© www.soinside.com 2019 - 2024. All rights reserved.