Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQLite中查询间隙并列出间隙的上下限?_Sqlite - Fatal编程技术网

如何在SQLite中查询间隙并列出间隙的上下限?

如何在SQLite中查询间隙并列出间隙的上下限?,sqlite,Sqlite,我正在努力在一个简单的SQLite表中列出差距,包括它们的上下限 下表: 身份证 一, 二, 五, 六, 八, 我想要的是一个类似cnt计算缺失整数的结果: lb-ub-cnt 2 5 2 681 我已经找到了差距,但不知道如何将下限和上限放在一起并计算缺失的整数: 选择id 从表mo 不存在的地方 选择空值 从消息mi 其中mi.\u id=mo.\u id+1 按id订购 将条件替换为-1,我将获得其他边界。必须使用子方程获得间隙: select t.id lb, t.next ub, (t

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

下表:

身份证

一,

二,

五,

六,

八,

我想要的是一个类似cnt计算缺失整数的结果:

lb-ub-cnt

2 5 2

681

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

选择id 从表mo 不存在的地方 选择空值 从消息mi 其中mi.\u id=mo.\u id+1 按id订购


将条件替换为-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 

请参见

您必须使用子等式获得间隙:

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 

请参见

看起来像一个简单的缺口和孤岛问题

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;
给予


注意:以上要求Sqlite 3.25或更新版本

看起来像是一个简单的缺口和孤岛问题

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;
给予


注意:以上要求使用Sqlite 3.25或更新版本

我不理解预期结果集背后的逻辑。我不理解预期结果集背后的逻辑。