查询以查找同一 table 中代码级别的最新代码
Query to find latest code for code level in same table
我有一个 table,其中每个代码 ID 都引用同一 table 中的另一列,以下是场景
Table: Code
OldCode NewCode
A B
B C
C D
D E
我想查询上面的 table 其中 OldCode
= A 结果代码应该是 NewCode
=E
即:A->B
、B->C
、C->D
、D->E
我想不出查询中的逻辑来实现它,但我们可以通过 dataframe
来实现,但我想通过查询来实现。
我尝试使用 CTE,但我无法理解实现它的递归 CTE 概念。
您可以在此处使用递归 CTE:
WITH RECURSIVE cte(n) AS (
SELECT OldCode, NewCode, 1 AS lvl FROM yourTable WHERE OldCode = 'A'
UNION ALL
SELECT t1.OldCode, t1.NewCode, n + 1
FROM yourTable t1
INNER JOIN cte t2 ON t2.NewCode = t1.OldCode
)
SELECT NewCode
FROM cte
ORDER BY lvl DESC
LIMIT 1;
这里的逻辑是在 CTE 的递归步骤中将所有级别连接在一起(这就是 下面 UNION ALL
中出现的内容)。我们还为每个连接计算一个级别,在基本情况下从 1 开始。那么,为了得到我们想要的NewCode
,我们只要取level值最高的那条记录即可。
我有一个 table,其中每个代码 ID 都引用同一 table 中的另一列,以下是场景
Table: Code
OldCode NewCode
A B
B C
C D
D E
我想查询上面的 table 其中 OldCode
= A 结果代码应该是 NewCode
=E
即:A->B
、B->C
、C->D
、D->E
我想不出查询中的逻辑来实现它,但我们可以通过 dataframe
来实现,但我想通过查询来实现。
我尝试使用 CTE,但我无法理解实现它的递归 CTE 概念。
您可以在此处使用递归 CTE:
WITH RECURSIVE cte(n) AS (
SELECT OldCode, NewCode, 1 AS lvl FROM yourTable WHERE OldCode = 'A'
UNION ALL
SELECT t1.OldCode, t1.NewCode, n + 1
FROM yourTable t1
INNER JOIN cte t2 ON t2.NewCode = t1.OldCode
)
SELECT NewCode
FROM cte
ORDER BY lvl DESC
LIMIT 1;
这里的逻辑是在 CTE 的递归步骤中将所有级别连接在一起(这就是 下面 UNION ALL
中出现的内容)。我们还为每个连接计算一个级别,在基本情况下从 1 开始。那么,为了得到我们想要的NewCode
,我们只要取level值最高的那条记录即可。