说我有一个包含两列X1和X2的表,其中X1总是小于X2。每行组成一个范围(X1,X2)。几行的X1 / X2范围可能重叠以形成更大的范围(X1n,X2m)。
是否可以使用标准SQL查询以找到所有这些范围?
例如,表可能如下所示:
|x1 |x2 |
-----------------------
|1 |3 |
|2 |4 |
|3 |5 |
|7 |9 |
|8 |27 |
|100 |105 |
-----------------------
预期输出为:
((1, 5), (7, 27), (100, 105))
我感谢我们在正确方向上的帮助。
我正在使用sqlite 3.11.0
。
答案 0 :(得分:2)
尝试一下:
SELECT
t1.x1 AS Start,
MIN(t2.x2) AS End
FROM test t1
INNER JOIN test t2 ON t1.x1 <= t2.x2
AND NOT EXISTS(SELECT * FROM test t3
WHERE t2.x2 >= t3.x1 AND t2.x2 < t3.x2)
WHERE NOT EXISTS(SELECT * FROM test t4
WHERE t1.x1 > t4.x1 AND t1.x1 <= t4.x2)
GROUP BY t1.x1