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

如何用SQL查询数据库表中指定PersonID第二次出现的对应行记录

方案1:窗口函数实现(兼容性好,支持MySQL 8.0+/PostgreSQL/SQL Server等所有主流新版数据库)

思路是先给同一个personID下的所有记录按出现时间排序编号,再筛选编号为2的目标记录即可,SQL语句如下:

-- 先给同personID的记录按时间升序排序编号
WITH ranked_seen AS (
    SELECT 
        seenID,
        personID,
        seenTime,
        ROW_NUMBER() OVER (PARTITION BY personID ORDER BY seenTime ASC, seenID ASC) AS row_num
    FROM 你的表名 -- 替换为你实际的表名
)
-- 筛选personID为3的第2条记录
SELECT seenID, personID, seenTime
FROM ranked_seen
WHERE personID = 3 AND row_num = 2;

补充说明:排序规则里额外加了seenID排序,是为了避免出现两条记录seenTime完全一致时,排序结果不稳定的问题,如果你的业务场景里seenTime不会重复,可以去掉这个排序条件。


方案2:老版本MySQL兼容写法(不支持窗口函数/CTE的场景)

可以直接用LIMIT偏移取值,跳过第一条记录取1条即可:

SELECT seenID, personID, seenTime
FROM 你的表名
WHERE personID = 3
ORDER BY seenTime ASC, seenID ASC
LIMIT 1,1; -- 第一个参数是偏移量(跳过1条),第二个参数是返回条数

如果需要适配其他数据库或者有特殊排序规则,调整ORDER BY后的排序字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:18:04