You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQLite中对messages表重复ID记录去重并保留最后条目

SQLite 查询保留相同ID的最后一条记录

你的messages表存在重复ID的记录,需要按插入顺序保留每个ID的最后一条,返回唯一ID的结果集。以下是几种可行的实现方式:

方法一:使用窗口函数(SQLite 3.25.0+ 支持)

利用ROW_NUMBER()窗口函数按ID分组,结合rowid(SQLite默认自增字段,对应插入顺序)倒序排序,取每组的第一条记录:

SELECT id, owner, content
FROM (
    SELECT 
        id, owner, content,
        ROW_NUMBER() OVER (PARTITION BY id ORDER BY rowid DESC) AS rn
    FROM messages
) t
WHERE rn = 1;

方法二:关联子查询(兼容低版本SQLite)

如果你的SQLite版本不支持窗口函数,可以通过子查询获取每个ID对应的最大rowid,再关联原表取出对应记录:

SELECT m.id, m.owner, m.content
FROM messages m
INNER JOIN (
    SELECT id, MAX(rowid) AS max_rowid
    FROM messages
    GROUP BY id
) t ON m.id = t.id AND m.rowid = t.max_rowid;

特殊情况:表无rowid字段

如果你的表创建时指定了WITHOUT ROWID,需要先添加自增序列字段来记录插入顺序:

ALTER TABLE messages ADD COLUMN seq INTEGER PRIMARY KEY AUTOINCREMENT;

之后将上述SQL中的rowid替换为seq即可。

内容的提问来源于stack exchange,提问作者Joby Taffey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:05:42