Oracle LAG没有Where子句

时间:2018-02-15 22:09:03

标签: sql oracle

我需要选择以前的工资和当前工资来计算百分比。

我试图使用仅在最终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;

1 个答案:

答案 0 :(得分:0)

最终答案是在评论中的帮助下完成的。

在over子句中添加分区通过强制GROUPING或 PARTITIONING 到记录的employee字段来解决了这个问题。

select
  employee,
  payrate,
  lag(payrate) over (partition by employee order by effectdate) as prevrow
from
  payratetable;