选择左连接,按用户名分组并获取最后一行

时间:2013-11-27 08:21:47

标签: mysql group-by

我尝试使用此查询获取最后一个条目,但我无法获得最后一行(仅限第一行):

select users.*,messages.*
from messages
LEFT JOIN users
  ON messages.messageBy=users.email 
where messageToUser='{loginUser}'
GROUP BY messageBy

3 个答案:

答案 0 :(得分:1)

如果您想通过群组获取最后一条记录,请尝试以下查询

select users.*,message.*
from  
    message
LEFT JOIN 
    users
ON 
    message.messageBy = users.email 
where 
    messageToUser=1
AND 
    messageid IN (SELECT max(messageid) FROM message GROUP BY messageBy)
GROUP BY 
    messageBy
ORDER BY 
    messageid DESC

http://sqlfiddle.com/#!2/cda6f/1

的粗略演示

答案 1 :(得分:0)

因此,如果您的消息表中存储了任何类型的id字段或日期,则可以执行以下操作:

SELECT
...
ORDER BY your_date_field DESC
LIMIT 1

OR

SELECT
...
ORDER BY id DESC
LIMIT 1

否则,您将继续使用代码来计算返回的记录数,并获取最后一个记录。

答案 2 :(得分:0)

哦,你想要每个用户的最后一条消息。

股票解决方案看起来像这样......

SELECT x.*
  FROM my_table x
  JOIN (SELECT my_grouping_id,MAX(my_ordering_id) max_my_ordering_id FROM my_table GROUP BY my_grouping_id) y
    ON y.my_grouping_id = x.my_grouping_id 
   AND y.max_my_ordering_id = x.my_ordering_id;