题解 | 查找在职员工自入职以来的薪水涨幅情况
查找在职员工自入职以来的薪水涨幅情况
https://www.nowcoder.com/practice/fc7344ece7294b9e98401826b94c6ea5
我和题解对于“薪水涨幅情况”理解有所有不同。我理解成从入职到当前所的有多个时间段和各自有对应的growth。题解的解读是从入职到当前两个时间点上薪水变化。
按照我的理解,我的解题思路是:利用CTE,先筛选在职员工(max(date) = '9999-01-01')current_employees,然后从salaries里找出所有在职员工,每个员工可能对应对各from_date,据此利用窗口函数partition by emp_no,找到每个from_date的前一个from_date的数据,做差之后就是growth。最后再排序,需要注意第一期from_date之前是没有数据的,所有会出现null的情况,最后排序之前需要做筛选。
with
current_employees as (
select
emp_no,
max(to_date)
from
salaries
group by
emp_no
having
max(to_date) = '9999-01-01' -- cast('9999-01-01' as date)
),
summary as (
select
emp_no,
salary,
from_date,
salary - lag(salary) over (
partition by
emp_no
order by
from_date
) as growth
from salaries
where emp_no in (
select emp_no from current_employees
)
)
select
emp_no,
growth
from
summary
where growth is not null
order by
growth
其实根据输出样例,只有emp_no和growth,我理应推测出题目的意思,即从入职到当前这两个时间点上的薪资变化。