给定一个行表,每个行代表一个数值范围。
CREATE TABLE ranges (
start INTEGER,
end INTEGER
)
我如何创建一个视图来表示范围中的“漏洞”?(忽略从-infinity到+无穷远的界限)。
例如,如果表中有数据:
(1,3)
(4,5)
(8,10)
(16,20)
我想要的结果是:
(6,7)
(11,15)
我用的是python和sqlite。目前,我认为在sqlite函数或python中使用过程方法可能是最清晰、最具表现力的方法。
我已经看到了一种查找缺少日期的方法,这种方法依赖临时表获取所有可能的日期,但是这种方法对于整数范围是不可行的,因为它们可能非常大。
发布于 2018-11-20 13:29:51
我喜欢这样做:
select (start + 1) as missing_start, (next_start - 1) as missing_ne
from (select t.*,
(select min(t2.start)
from t t2
where t2.start > t.start
) as next_start
from t
) t
where next_start > end + 1;
请注意,这假定不存在重叠。如果有可能出现重叠,问题就会更难解决。
https://stackoverflow.com/questions/53401667
复制