查询以查找同一表中代码级别的最新代码



我有一个表,其中每个代码id都引用到同一表中的另一列,下面是场景

Table: Code
OldCode     NewCode
A           B
B           C
C           D
D           E

我想查询上表,其中对于OldCode=A,结果代码应该是NewCode=E

即:A->BB->CC->DD->E

我想不出用查询中的逻辑来实现它,但我们可以通过dataframe来实现,但我想通过查询来实现di。

我尝试过使用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,我们只需取具有最高级别值的记录。

相关内容

  • 没有找到相关文章

最新更新