SQL:表示缺少范围的视图

时间:2018-11-20 21:17:58

标签: sql sqlite

给出一个表格,每个表格代表一个数字范围。

CREATE TABLE ranges (
    start INTEGER,
    end INTEGER
)

如何创建表示范围内“孔”的视图? (忽略从-infinity到+ infinity的边界)。

例如,如果表中包含数据:

(1,3)
(4,5)
(8,10)
(16,20)

我想要的结果是:

(6,7)
(11,15)

我正在使用python和sqlite。我目前正在考虑在sqlite函数或python中使用过程方法可能是最清晰,性能最高的方法。

我已经看到了一种查找所有日期可能依赖于临时表的缺失日期的方法,但是这种方法对于整数范围可能不可行,因为它们可能很大。

1 个答案:

答案 0 :(得分:2)

我喜欢这样做:

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;

请注意,这假定没有重叠。如果有可能重叠,则问题将更难以解决。