我需要选择以前的工资和当前工资来计算百分比。
我试图使用仅在最终order by子句之前处理的Oracle Analytical函数LAG。因为LAG函数直到where子句之后才运行,如果我包含我的where子句来缩小一个员工的范围,它可以完美地工作,但是当包括所有员工时它返回它上面的任何行。
以前有人遇到过这个吗?
工作(按适当数量顺序退货):
select
employee,
payrate,
lag(payrate) over (order by effectdate) as prevrow
from
payratetable;
where employee = 1234;
不工作(以其他员工的随机费率退货):
select
employee,
payrate,
lag(payrate) over (order by effectdate) as prevrow
from
payratetable;
答案 0 :(得分:0)
最终答案是在评论中的帮助下完成的。
在over子句中添加分区通过强制GROUPING或 PARTITIONING 到记录的employee字段来解决了这个问题。
select
employee,
payrate,
lag(payrate) over (partition by employee order by effectdate) as prevrow
from
payratetable;