赞
踩
根据下表编写SQL语句,对于每个员工,查询他除最近一个月(即最大月)之外,剩下每个月的近三个月的累计薪水(不足三个月也要计算),结果请按Id升序,然后按Month降序显示。
解题思路:用sum()over(partition by…order by…rows…)聚合窗口函数。
(1)按照员工ID分组,月份升序,对薪水Salary进行逐月累计求和;
(2)(1)获得的累计薪水还要加上一个限制条件:最近三个月。所以再加上一个子句,取当前月和前两个月的薪水累计,即可得到每个员工每个月最近三个月的累计薪水;
(3)筛选条件是月份不在最大月(也就是当前月);
(4)最后按照ID升序,Month降序排序即可。
select id, month, sum(salary) over (partition by id order by month range 2 preceding) as Salary
from employee
where (id,month) not in (select id,max(month) from Employee group by id)--排除最大月
order by id, month desc;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。