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.
中查询其他字段
我正在开发 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.
中查询其他字段