我有一个具有以下结构的SQLite表:
create table Message (
_id integer primary key autoincrement,
convo_id text,
isSender BOOLEAN,
isRead BOOLEAN,
message text,
time timestamp default (strftime('%s', 'now'))
);
它存储具有唯一convo_id的每个朋友的所有消息。
我想要一个查询来获取每个convo_id的最后一条消息(换句话说,每个朋友的最后一条消息)。
答案 0 :(得分:1)
首先,找出每个convo_id
的最后一个时间戳:
SELECT convo_id,
MAX(time) AS time
FROM Message
GROUP BY convo_id
然后,使用这些值过滤原始表的记录:
SELECT Message.*
FROM Message
JOIN (SELECT convo_id,
MAX(time) AS time
FROM Message
GROUP BY convo_id)
USING (convo_id, time)
如果你有SQLite 3.7.11或更高版本,你可以一步完成所有事情:
SELECT *,
MAX(time)
FROM Message
GROUP BY convo_id
答案 1 :(得分:0)
类似的东西:
select convo_id,message from Message where (convo_id,_id) IN (select convo_id,max(_id) as _id from Message group by convo_id);
可能包含语法错误。我没有在我的电脑上试过它。