Sqlite由Before Group按顺序排列

时间:2015-11-05 09:36:20

标签: android mysql sqlite sql-order-by

我正在开发一个android sqlite db

我有2个表:chat,chat_messages

chat  
|_id |chatName      
 1   first
 2   second

chat_messages 
|_id |Chat_chatId |chatMessageContent |chatMessageId
 1      1         ttyl              4
 2      1         busy              3
 3      2         hi                2
 4      1         hi howdy          1

我希望每个聊天显示一个显示最新chatMessageContent的页面 如下所示

result
|chatName |chatMessageContent  |chatMessageId 
first      ttyl                4
second     hi                  2

由于从服务器恢复的数据出现故障,每次聊天的最新chatMessageContent需要遵循chatMessageId desc

如果子查询的Mysql工作

Select * from (Select c._id,c.chatName,cm._id,cm.chatMessageContent,cm.chatMessageId from chat c, chat_message cm where cm.Chat_chatId = c._id order by cm.chatMessageId desc ) as lc GROUP BY lc.Chat_chatId

但它不适用于sqlite

2 个答案:

答案 0 :(得分:1)

SELECT c.chatName, cm.chatMessageContent, cm.chatMessageId FROM chat_messages cm
INNER JOIN chat c ON c._id = cm.Chat_chatId
INNER JOIN (SELECT MAX(chatMessageId) as maxid, Chat_chatId FROM chat_messages GROUP BY Chat_chatId) AS t ON t.maxid=cm.chatMessageId

子查询确保每次聊天都能获得最大的chatMessageId。通过内部连接到chatmessages表,您可以消除所有其他聊天消息,您也可以从chatmessages表中查询其他字段。

答案 1 :(得分:0)

尝试此查询,我认为这是一个适合您的解决方案。这不是更好的解决方案,但是......

SELECT * FROM chat_messages  t
JOIN chat c ON c._id = t.Chat_chatId
WHERE chatMessageId = (
    SELECT MAX(t2.chatMessageId) 
    FROM chat_messages  t2
    WHERE t2.Chat_chatId = t.Chat_chatId
)