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

SQLite3如何查询每个userid分组的最后一条记录

实现思路(SQLite3)

假设你的表名为scores,以下是几种可行的实现方式:

方法一:子查询+关联查询

先通过子查询找出每个userid对应的最大id,再将这个结果和原表关联,获取对应的score信息:

SELECT s.id, s.userid, s.score
FROM scores s
JOIN (
    SELECT userid, MAX(id) AS max_id
    FROM scores
    GROUP BY userid
) t ON s.id = t.max_id AND s.userid = t.userid;

原理:先分组统计每个用户的最大id(因为id递增,最大id就是最后一条记录),再通过id和userid匹配原表数据,拿到完整记录。

方法二:窗口函数(SQLite3.25.0+)

如果你的SQLite版本在3.25.0及以上,可以用ROW_NUMBER()窗口函数,给每个用户的记录按id倒序编号,取编号为1的那条:

SELECT id, userid, score
FROM (
    SELECT 
        id, userid, score,
        ROW_NUMBER() OVER (PARTITION BY userid ORDER BY id DESC) AS rn
    FROM scores
) t
WHERE rn = 1;

原理:PARTITION BY userid按用户分组,ORDER BY id DESC让每组内id大的排在前面,ROW_NUMBER()给每组记录编号,取rn=1就是每组最后一条。

方法三:NOT EXISTS 子查询

通过判断当前记录是否是该用户的最大id记录(即不存在同用户且id更大的记录):

SELECT id, userid, score
FROM scores s
WHERE NOT EXISTS (
    SELECT 1 
    FROM scores t 
    WHERE t.userid = s.userid AND t.id > s.id
);

原理:对每条记录,检查是否有同用户的更大id记录,没有的话就是该用户的最后一条。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:05:33