如何在 oracle 或任何其他分析函数中对组使用超前或滞后以获得所需结果?

How to use lead or Lag for a Group in oracle or any other analytic function to get desired result?

输入

id   name     date   value
1     aa      x      v1
1     aa      y      v1
1     aa      z      v1
2     bb      a      v2
2     bb      b      v2
3     cc      c      v2
4     dd      d      v3
4     dd      e      v3
5     ee      f      v4

输出

   id   name     date   value  lead value
    1     aa      x      v1      v2
    1     aa      y      v1      v2
    1     aa      z      v1      v2
    2     bb      a      v2      v2
    2     bb      b      v2      v2
    3     cc      c      v2      v3
    4     dd      d      v3      v4
    4     dd      e      v3      v4
    5     ee      f      v4     null

如何获取id的潜在客户价值?即对于 id 1 的引导值是 v2,对于 id 2 的引导值也是 v2(因为 id 3 的值是 v2),对于 id 3 的引导值是 v3 等等..

您可以使用以下查询获得所需的结果:

with 
CTE1(ID, VALUE) AS
(select distinct id, 
 value from table1 
 order by id
),
CTE2 AS
(
SELECT A.ID, 
  A.VALUE, 
  LEAD(A.VALUE) OVER(ORDER BY A.ID) LEAD_VALUE 
FROM CTE1 A
)
SELECT A.*, B.LEAD_VALUE 
FROM TABLE1 A, CTE2 B
WHERE A.ID = B.ID;

DB_FIDDLE