SQL日期问题:仅显示每位员工的最新求学记录单条数据
解决方案:获取每位员工最新求学记录
没问题,这是日常SQL查询里很常见的需求,我给你两种通用的实现方式,适配绝大多数主流数据库(比如MySQL、PostgreSQL、SQL Server等):
方法一:使用窗口函数(推荐)
窗口函数是处理这类分组取最值场景最直观的方式,我们可以用ROW_NUMBER()给每个员工的记录按school_end倒序排名,然后筛选出排名为1的记录:
WITH ranked_records AS ( SELECT employee_id, school_end, school_name, ROW_NUMBER() OVER ( PARTITION BY employee_id ORDER BY school_end DESC ) AS record_rank FROM your_table_name ) SELECT employee_id, school_end, school_name FROM ranked_records WHERE record_rank = 1;
说明:
PARTITION BY employee_id:按员工ID分组,确保每个员工的记录单独排序ORDER BY school_end DESC:在每组内按毕业日期倒序,最新的日期排第1- 如果存在多条记录毕业日期相同且都是最新的情况,
ROW_NUMBER()会随机选一条;如果想保留所有同日期的最新记录,可以把ROW_NUMBER()换成RANK()或DENSE_RANK()
方法二:使用关联子查询
如果你的数据库版本不支持窗口函数(比如老版本MySQL),可以用子查询先找到每个员工的最新毕业日期,再关联原表获取对应的学校名称:
SELECT t.employee_id, t.school_end, t.school_name FROM your_table_name t INNER JOIN ( SELECT employee_id, MAX(school_end) AS latest_school_end FROM your_table_name GROUP BY employee_id ) latest ON t.employee_id = latest.employee_id AND t.school_end = latest.latest_school_end;
说明:
- 子查询先找出每个员工的最大
school_end(即最新毕业日期) - 通过
INNER JOIN关联原表,匹配员工ID和最新日期,得到对应的学校名称 - 这种方法同样会保留所有同日期的最新记录(如果存在的话)
记得把代码里的your_table_name替换成你实际的表名哦!
内容的提问来源于stack exchange,提问作者BobJones
相关产品推荐
相关产品推荐

