【问题标题】:How to query gaps and list lower/upper bounds of the gap in SQLite?如何在 SQLite 中查询间隙并列出间隙的下限/上限?
【发布时间】:2019-01-21 06:54:08
【问题描述】:

我正在努力在一个简单的 SQLite 表中列出差距,包括它们的下限和上限。

桌子:

身份证

1

2

5

6

8

我想要的是这样的结果(cnt 正在计算缺失的整数):

磅 ub cnt

2 5 2

6 8 1

我已经找到了差距,但不知道如何将下限和上限放在一起并计算缺失的整数:

选择 ID 从表莫 不存在的地方 ( 选择空 FROM 消息 mi 哪里 mi._id = mo._id + 1 ) 按编号订购

将条件替换为 -1 我得到了另一个界限。

【问题讨论】:

  • 我不明白您预期结果集背后的逻辑。

标签: sqlite


【解决方案1】:

您必须使用子查询来获取间隙:

select t.id lb, t.next ub, (t.next - t.id - 1) cnt from (
  select 
    id, 
    (select min(id) from tablename where t.id < id) next
  from tablename t
  ) t
where t.next is not null and t.next - t.id > 1 

demo

【讨论】:

    【解决方案2】:

    看起来像一个简单的间隙和孤岛问题。

    CREATE TABLE test(id INTEGER PRIMARY KEY);
    INSERT INTO test VALUES (1), (2), (5), (6), (8);
    WITH ranges AS (SELECT id AS lb, lead(id, 1) OVER (ORDER BY id) AS ub FROM test) 
    SELECT lb, ub, ub - lb - 1 AS cnt FROM ranges WHERE ub - lb > 1;
    

    给予

    lb          ub          cnt       
    ----------  ----------  ----------
    2           5           2         
    6           8           1     
    

    (注:以上需要Sqlite 3.25或更新版本)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      相关资源
      最近更新 更多