2列sqlite数据库中的A-> B-> C关系管理
A->B->C relationship management in a 2 column sqlite database
大家好,在此先感谢您的帮助。
我已经设置了一个通信 table 看起来像这样
Old
New
A
B
B
C
A
D
C
D
当然这是在多个时间点上一个状态与另一个状态之间对应关系的日志。
我正在尝试通过拉平新旧之间的关系来将这些数据转换为“可用格式”以达到如下目的:
Old
New
A
D
B
D
C
D
有人知道如何在 SQL 中做这样的事情吗?
请记住迭代可以 运行 7 层深。
非常感谢
使用递归 CTE:
WITH cte AS (
SELECT old, new, 1 level FROM tablename
UNION ALL
SELECT c.old, t.new, level + 1
FROM tablename t INNER JOIN cte c
ON c.new = t.old
)
SELECT DISTINCT old,
FIRST_VALUE(new) OVER (PARTITION BY old ORDER BY level DESC) new
FROM cte
ORDER BY old;
参见demo。
大家好,在此先感谢您的帮助。
我已经设置了一个通信 table 看起来像这样
Old | New |
---|---|
A | B |
B | C |
A | D |
C | D |
当然这是在多个时间点上一个状态与另一个状态之间对应关系的日志。 我正在尝试通过拉平新旧之间的关系来将这些数据转换为“可用格式”以达到如下目的:
Old | New |
---|---|
A | D |
B | D |
C | D |
有人知道如何在 SQL 中做这样的事情吗? 请记住迭代可以 运行 7 层深。 非常感谢
使用递归 CTE:
WITH cte AS (
SELECT old, new, 1 level FROM tablename
UNION ALL
SELECT c.old, t.new, level + 1
FROM tablename t INNER JOIN cte c
ON c.new = t.old
)
SELECT DISTINCT old,
FIRST_VALUE(new) OVER (PARTITION BY old ORDER BY level DESC) new
FROM cte
ORDER BY old;
参见demo。