如何在 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;
输入
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;