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

SQL实现按人员取最大person_id,忽略不同团队部门的其他行

解决方法

要实现每个人员仅保留最大person_id对应的行,不管其division_name、team_name是否不同,可以用以下两种常见方案:

方案1:窗口函数(推荐,适用于MySQL 8+、PostgreSQL、SQL Server等现代数据库)

使用ROW_NUMBER()窗口函数按人员分组并排序,取每组中person_id最大的行:

WITH ranked_persons AS (
    SELECT 
        person_id,
        person_name,
        division_name,
        team_name,
        -- 按person_name分组,组内按person_id降序排序,标记行号
        ROW_NUMBER() OVER (PARTITION BY person_name ORDER BY person_id DESC) AS rn
    FROM organization_table
)
-- 筛选每个组中行号为1的记录(即person_id最大的行)
SELECT person_id, person_name, division_name, team_name
FROM ranked_persons
WHERE rn = 1;

方案2:子查询关联(兼容旧版本数据库,如MySQL 5.x)

先通过子查询获取每个人员的最大person_id,再关联原表获取对应行的完整数据:

SELECT ot.person_id, ot.person_name, ot.division_name, ot.team_name
FROM organization_table ot
INNER JOIN (
    -- 先找出每个person_name对应的最大person_id
    SELECT person_name, MAX(person_id) AS max_person_id
    FROM organization_table
    GROUP BY person_name
) max_ids 
ON ot.person_name = max_ids.person_name AND ot.person_id = max_ids.max_person_id;

原SQL问题说明

你之前的SQL同时按person_name, division_name, team_name分组,会把同一人员但不同部门/团队的记录拆分成多个分组,导致无法得到每个人员全局最大person_id的行,这就是不符合需求的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:10:38