2015-11-05 4 views
-1

Я работаю на андроид БД SQLiteSqlite Сортировать по Перед Группировать Как Mysql

У меня есть 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

+0

ха? что такое точка GROUP BY без агрегатной функции? есть DISTINCT – Selvin

+0

Я не знаком с DISTINCT, разве это не похоже на GROUP BY ?? –

ответ

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.

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 
) 
Смежные вопросы