如何在SQLite中查询间隙并列出间隙的上下限?
我正在努力在一个简单的SQLite表中列出差距,包括它们的上下限 下表: 身份证 一, 二, 五, 六, 八, 我想要的是一个类似cnt计算缺失整数的结果: lb-ub-cnt 2 5 2 681 我已经找到了差距,但不知道如何将下限和上限放在一起并计算缺失的整数: 选择id 从表mo 不存在的地方 选择空值 从消息mi 其中mi.\u id=mo.\u id+1 按id订购如何在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
将条件替换为-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或更新版本我不理解预期结果集背后的逻辑。我不理解预期结果集背后的逻辑。