gpt4 book ai didi

SQL oracle 下一个值

转载 作者:行者123 更新时间:2023-12-04 16:03:57 26 4
gpt4 key购买 nike

如何获取每个 name1 和 id 的下一个值 (nextname1)? SQL Oracle.我尝试使用解析函数LEADLAST_VALUE但不工作:

LEAD(name1) OVER (PARTITION BY id ORDER BY id) as nextname1

返回:
id name1 (nextname1)
1 AA (AA)
2 AA (AA)
3 AA (MB)
4 MB (MB)
5 MB (BB)
6 BB (BB)
7 BB (ZZ)
8 ZZ (null)

我想要:
id name1 (nextname1)
1 AA (MB)
2 AA (MB)
3 AA (MB)
4 MB (BB)
5 MB (BB)
6 BB (ZZ)
7 BB (ZZ)
8 ZZ (null)

注意:我有一个包含数百万条记录的表。

最佳答案

你可以通过两个步骤来做到这一点:

SQL> WITH DATA AS (
2 SELECT 1 id, 'AA' name FROM DUAL
3 UNION ALL SELECT 2 id, 'AA' name FROM DUAL
4 UNION ALL SELECT 3 id, 'AA' name FROM DUAL
5 UNION ALL SELECT 4 id, 'MB' name FROM DUAL
6 UNION ALL SELECT 5 id, 'MB' name FROM DUAL
7 UNION ALL SELECT 6 id, 'BB' name FROM DUAL
8 UNION ALL SELECT 7 id, 'BB' name FROM DUAL
9 UNION ALL SELECT 8 id, 'ZZ' name FROM DUAL
10 )
11 SELECT v.*, max(first_step) OVER (PARTITION BY name) nextname
12 FROM (SELECT data.*,
13 nullif(lead(name) OVER (ORDER BY id), name) first_step
14 FROM data) v
15 ORDER BY id;

ID NA FI NE
---------- -- -- --
1 AA MB
2 AA MB
3 AA MB MB
4 MB BB
5 MB BB BB
6 BB ZZ
7 BB ZZ ZZ
8 ZZ

关于SQL oracle 下一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12390415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com