Sqlite Order by Before Group By Like Mysql

Sqlite Order by Before Group By Like Mysql

我正在开发 android sqlite 数据库

我有 2 个表:聊天,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

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

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
)
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。通过将此加入到聊天消息 table 中,您消除了所有其他聊天消息,并且您也可以从聊天消息 table.

中查询其他字段