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

MySQL按最新日期筛选用户及员工最新薪资查询问题求助

解决按最新日期筛选高薪员工的SQL问题

嘿,这问题我熟!你现在遇到的情况是:同一个员工可能有多条薪资≥70000的记录,只是to_date不同,所以哪怕用了DISTINCT,还是会返回多条——因为这些记录的日期不一样,DISTINCT没法帮你只留最新的那条。

其实只需要借助窗口函数给每个员工的薪资记录按日期排序,再筛选出最新的那条就行,完整的SQL语句如下:

SELECT first_name, last_name, salary, to_date
FROM (
    SELECT 
        e.first_name, 
        e.last_name, 
        s.salary, 
        s.to_date,
        -- 新增:给每个员工的薪资记录按日期倒序编号,最新的记为1
        ROW_NUMBER() OVER (PARTITION BY e.emp_no ORDER BY s.to_date DESC) AS rn
    FROM employees e 
    LEFT JOIN salaries s ON e.emp_no = s.emp_no AND s.salary >= 70000
) AS temp
WHERE rn = 1; -- 新增:只保留编号为1的最新记录

为什么这样能解决问题?

  • PARTITION BY e.emp_no:把数据按员工编号分组,每个员工单独处理
  • ORDER BY s.to_date DESC:每个员工的薪资记录按日期从新到旧排序
  • ROW_NUMBER():给每组内的记录编序号,最新的那条序号是1
  • 外层WHERE rn = 1:过滤出每个员工的最新薪资记录

这样就不会再返回多条重复员工的记录啦,而且比单纯用DISTINCT更精准地满足你“取最新日期”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:07:37