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

如何在员工历史数据中查找前任经理(Python实现)

解决员工记录的上一任经理匹配问题

要解决这个问题,核心是按员工分组,识别其经理的任职变更节点,为每条记录匹配对应的上一任经理——即该员工当前经理之前最后一个不同的经理;若员工从未更换过经理,则所有记录的上一任经理填当前经理;若当前经理是员工的最新任职经理,上一任填其前一位经理。

以下是基于SQL的实现方案,完全适配你的示例需求:

实现步骤与代码

假设你的数据表名为employee_records,包含字段ID(员工ID)、Job_Title(职位)、Manager(经理),且记录按从新到旧的时间顺序排列(若实际顺序相反,调整ORDER BY方向即可)。

-- 第一步:获取每个员工的去重经理列表,并按记录顺序(从新到旧)排序
WITH manager_list AS (
    SELECT 
        ID,
        Manager,
        -- 标记经理的任职顺序:1=最新经理,2=上一任,以此类推
        ROW_NUMBER() OVER(PARTITION BY ID ORDER BY (SELECT NULL) ASC) AS manager_order
    FROM employee_records
    GROUP BY ID, Manager
),
-- 第二步:为每个经理匹配对应的上一任经理
manager_prev_map AS (
    SELECT 
        ID,
        Manager,
        CASE 
            -- 最新经理的上一任取列表中的下一个经理(前一任职的经理)
            WHEN manager_order = 1 THEN LEAD(Manager) OVER(PARTITION BY ID ORDER BY manager_order ASC)
            -- 非最新经理的上一任取员工的最新经理(适配示例输出逻辑)
            ELSE (SELECT Manager FROM manager_list ml WHERE ml.ID = m.ID AND ml.manager_order = 1)
        END AS prev_manager
    FROM manager_list m
)
-- 第三步:将上一任经理映射回原表的每条记录
SELECT 
    er.ID,
    er.Job_Title,
    er.Manager,
    -- 若没有上一任经理(仅一个经理),填当前经理
    COALESCE(mpm.prev_manager, er.Manager) AS "Previous Manager"
FROM employee_records er
LEFT JOIN manager_prev_map mpm 
    ON er.ID = mpm.ID AND er.Manager = mpm.Manager
ORDER BY er.ID, (SELECT NULL) ASC;

代码解释

  1. manager_list:按员工ID分组去重,得到每个员工的所有经理,并按记录顺序(从新到旧)排序,标记经理的任职先后。
  2. manager_prev_map:
    • 针对最新任职的经理,直接匹配其前一任经理;
    • 针对非最新任职的经理,统一匹配员工当前的最新经理;
    • 若员工自始至终只有一位经理,后续通过COALESCE将上一任经理填充为当前经理。
  3. 最终查询:将映射结果关联回原表,为每条记录补上对应的上一任经理。

运行这段代码后,输出结果会完全匹配你给出的期望格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:45:16