题解 | 查找在职员工自入职以来的薪水涨幅情况

SELECT b3.emp_no, MAX(b3.end_salary)-MAX(b3.start_salary) AS growth
FROM (
    SELECT E.emp_no, b2.salary, b2.from_date, b2.to_date,
    CASE WHEN b2.from_date=b2.minfrom_date THEN b2.salary ELSE 0 END AS start_salary,
    CASE WHEN b2.to_date=b2.maxto_date THEN b2.salary ELSE 0 END AS end_salary
    FROM employees E
    # salaries表格----筛选出在职员工信息,以及最初&最近一次的薪水
    JOIN (SELECT *
        FROM (
            SELECT emp_no, salary, from_date, to_date,
            MIN(from_date) OVER (PARTITION BY emp_no) AS minfrom_date,
            MAX(to_date) OVER (PARTITION BY emp_no) AS maxto_date
            FROM salaries
            ) AS b1
        WHERE b1.maxto_date='9999-01-01'
        AND (b1.from_date=b1.minfrom_date OR b1.to_date=b1.maxto_date)
        ) AS b2
    ON E.emp_no=b2.emp_no
) AS b3
GROUP BY b3.emp_no
ORDER BY growth

全部评论

相关推荐

07-02 13:52
武汉大学 golang
骗你的不露头也秒
牛客87776816...:😃查看图片
点赞 评论 收藏
分享
Gaynes:查看图片
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 17:58
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务