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

如何从员工表与薪资表查询所有员工的最新月度薪资数据?

获取员工最新月度薪资的SQL解决方案

没问题,我来帮你搞定这个需求!要获取每个员工的最新月度薪资(也就是你数据里的3月薪资),这里有两种实用的SQL写法,都能完美解决你的问题:

方法一:子查询筛选每个员工的最大月份

这种方法先通过子查询找到每个员工对应的最晚薪资月份,再关联两张表拿到对应薪资:

SELECT e.emp_id, e.emp_name, s.salary
FROM `Employee-Table` e
JOIN `Salary-Table` s ON e.emp_id = s.emp_id
WHERE s.month = (
    SELECT MAX(month) 
    FROM `Salary-Table` 
    WHERE emp_id = e.emp_id
);

逻辑说明:

  1. 子查询SELECT MAX(month) FROM Salary-Table WHERE emp_id = e.emp_id会单独找出每个员工的最新薪资月份
  2. 外层查询通过员工ID关联两张表,只保留对应最新月份的薪资记录
  3. 因为你的数据里所有员工的最新月份都是3月,所以最终结果就是所有员工的3月薪资

方法二:用窗口函数ROW_NUMBER()标记最新记录

如果后续你的薪资数据会不断更新,这种方法更灵活,不需要修改查询逻辑就能自动获取最新薪资:

SELECT emp_id, emp_name, salary
FROM (
    SELECT 
        e.emp_id, 
        e.emp_name, 
        s.salary,
        ROW_NUMBER() OVER (PARTITION BY e.emp_id ORDER BY s.month DESC) AS rn
    FROM `Employee-Table` e
    JOIN `Salary-Table` s ON e.emp_id = s.emp_id
) t
WHERE rn = 1;

逻辑说明:

  1. 内层查询用ROW_NUMBER()函数,按员工ID分组(PARTITION BY e.emp_id),再按月份倒序排序(ORDER BY s.month DESC),给每个员工的薪资记录编号,最新的月份会被标记为rn=1
  2. 外层查询只筛选出编号为1的记录,也就是每个员工的最新薪资

小提示:

如果你的month字段是字符串类型,要确保数据库能正确识别它的日期排序(比如你用的"1st jan 2018"格式,大部分数据库可以自动解析,但更推荐把月份字段存储为日期类型,这样排序和筛选会更准确哦)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:11:15