SQL:选择GROUP BY与另一个表中的最后一个记录的对话

时间:2014-03-29 15:33:04

标签: mysql sql sql-server

我有以下问题。我有两张桌子:

baz_conversations

con_id, con_users, con_date

baz_con_messages

message_id, message_con_id, message_text, message_author

我想展示我的所有对话 - 表baz_conversations中的con_users必须包含来自该对话的另一个表的最后消息的myID。我花了太多时间编程这个,简单,sql选择,但它从表baz_con_messages中选择FIRST和NOT LAST消息。谢谢您的回答。这是我的代码:

SELECT m.*, c.* FROM baz_conversations AS c RIGHT JOIN 
                     baz_con_messages AS m ON c.con_id = m.message_con_id
WHERE c.con_users LIKE '%1,%' 
GROUP BY c.con_id 
ORDER BY m.message_id DESC 
LIMIT 1

2 个答案:

答案 0 :(得分:0)

我想你想要这样的东西:

SELECT m.*, c.*
FROM baz_conversations c JOIN 
     baz_con_messages m
     ON c.con_id = m.message_con_id
WHERE c.con_users LIKE '%1,%' AND
      not exists (select 1
                  from baz_con_messages m2
                  where m2.message_con_id = m.message_con_id and
                        m2.message_id > m.message_id
                 );

答案 1 :(得分:0)

尝试使用自联接,当您使用GROUP BY某些常见值时,您的结果会按顺序排列,但不能按顺序排列,因此您不能指望使用group by它会为您提供组的最新结果所以对于你的情况,你需要来自会话组的最后一个消息ID我在baz_conversations上使用另一个连接作为自联接,但这次我使用子查询来获取消息ID的最大值以及会话ID并加入两个条件,即{ {1}}所以第一个USING(message_id , message_con_id )与新的最大值结果集结合,其中会话ID是常见的,结果集也与消息ID匹配,因此根据每个会话组的baz_con_messages只返回一个结果< / p>

MAX(message_id)