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
相关产品推荐
相关产品推荐

