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

SQL如何查询数据表中每个用户分组对应的第二条记录

实现方案

如果你的数据库支持窗口函数(MySQL 8.0+、PostgreSQL、SQL Server、Oracle等主流版本都支持),优先使用ROW_NUMBER()窗口函数实现,逻辑清晰性能也更好:

WITH ranked_records AS (
    SELECT 
        id,
        user_id,
        value,
        -- 按user_id分组,组内按id升序排序生成行号
        ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY id ASC) AS row_num
    FROM 你的实际表名
)
-- 筛选每个分组内行号为2的记录,就是对应user_id的第二条
SELECT id, user_id, value
FROM ranked_records
WHERE row_num = 2;

如果是旧版本不支持窗口函数的场景(比如MySQL 5.7及更早版本),可以用关联子查询实现:

SELECT t1.id, t1.user_id, t1.value
FROM 你的实际表名 t1
WHERE (
    SELECT COUNT(*) 
    FROM 你的实际表名 t2 
    WHERE t2.user_id = t1.user_id AND t2.id <= t1.id
) = 2;

注意:以上两种写法默认你说的「第二条」是按id从小到大排序的第二条,如果你的排序规则不是id,把ORDER BY id ASC里的id换成对应排序字段即可。另外只有1条记录的user_id(比如示例里的user_id=3)会自然被过滤,和你给出的预期结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:15:07