MySql多个GROUP BY替代方案

时间:2018-08-31 17:53:57

标签: mysql group-by max

我有两个表: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,则只会对该结果集进行排序,但日期却不正确。如果我尝试多个“分组依据”,则每条消息都会显示一行。

这是否需要子查询,还是有一种更简单的方法来使created_date是最新的?

1 个答案:

答案 0 :(得分: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