我有一个数据:
# input
row id1 id2
-----------
1 a b
2 a c
3 d e
4 f g
5 g h
6 h k
,我想创建一个新的组id基于"link"如下所示:
# desired result
row id1 id2 new_group_id
-------------------------
1 a b 1
2 a c 1
3 d e 2
4 f g 3
5 g h 3
6 h k 3
,其中第1组被标记,因为第1组的每一行都由";a&;"(a-b, a-c)连接,第3组被标记,因为每一行都由";g&;"连接。和"h"(f-g, g-h, h-k)。
对此有什么聪明的解决方案吗?谢谢!
只是为了观察,重新表述为…
SELECT MIN(row) x
, MAX(row) y
, id
FROM
( SELECT row, id1 id FROM my_table
UNION ALL
SELECT row, id2 id FROM my_table
) a
GROUP BY id;
…
它变成了一个直接的"缺口和岛屿"问题,有无数的解决方案。