首先分组得到from_date的两个最值用以确定最初薪资和最终薪资(很重要的一步),接着根据上一步得到的最初调薪日和最后调薪日通过内连接筛选出对应的数据(即每个人对应的开始薪资和结束薪资这两条数据),因为考虑到可能降薪,涨薪幅度就为负数了,所以不能直接取最大最小差值,这里直接将最初薪资设置为负数,最后求和并且直接根据条件max(to_date)='9999-01-01' 过滤掉不在职员工的数据就好了。兄弟们我说的对吗?哈哈哈,加油

select emp_no,sum(newsalary) as growth
from (select s.emp_no,s.to_date,
case when from_date=min_date
then -salary
else salary
end
as newsalary
from salaries s
inner join
(select emp_no, max(from_date) max_date,min(from_date) min_date
from salaries
group by emp_no
)r1
on s.emp_no=r1.emp_no
and (s.from_date=r1.max_date or s.from_date=r1.min_date)
)r2
group by emp_no
having max(to_date)='9999-01-01'
order by growth asc