问题描述 我们现在有一张表titles,共有4个字段,分别是emp_no(员工编号),title(职位),from_date(起始时间),to_date(结束时间),记录的是员工在某个时间段内职位名称,因为会存在升职,转岗之类的,里面emp_no可能会对应多个职位,我们现在要取到所有员工最近的职位信息,包括离职员工。 本文介绍两种方法去实现结果: 方法一 嵌套一个group by+max()子查询获取最近的职位信息。 思路 通过对emp_no分组取每个emp_no对应的最大的from_date; SELECT emp_no, max( from_date ) AS max_date FROM titles GROUP BY emp_no 结果如下: 通过查询出来的最大的from_date取筛选最近的的一条职位信息。 SELECT t.emp_no, t.title FROM titles t LEFT JOIN ( SELECT emp_no, max( from_date ) AS max_date FROM titles GROUP BY emp_no ) et ON t.emp_no = et.emp_no AND t.from_date = et.max_date 结果如下: 方法二 通过rank over partition by函数实现,这个目前是Oracle独有的函数