查询以获取每个不同行的最后一条消息

时间:2014-04-06 05:11:04

标签: sql sqlite greatest-n-per-group

我有一个具有以下结构的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的最后一条消息(换句话说,每个朋友的最后一条消息)。

2 个答案:

答案 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);

可能包含语法错误。我没有在我的电脑上试过它。