首先通过子查询创建一个带行号的表,这里用row_number()对空值进行order,就可以得到每行的行号。然后限制to_date='9999-01-01',最后从子查询中选出所需字段并用sum(salary)加窗口函数根据行号进行排序算出当前位置的sum。
select emp_no, salary,
sum(salary) over (order by ranking) as running_total
from
(select * ,row_number() over (order by null) as ranking from salaries) as temp
where to_date = '9999-01-01'
这道题比较坑的点在于没说清楚是否要根据emp_no是否是排好序的,根据给的数据来看是排好序的,就不需要用row_number来加行号,但是我觉得既然题目没提就不能这么假设,所以还是加了行号。