android - SQL 查询,如何按条件按顺序查找给定表中的第一个和最后一个值
问题描述
我的表中有 id,id 从 1 到 20 开始,我想要一个查询,以查找给定表中的第一条和最后一条记录,但我想要某些条件的结果。
例如:如果我有记录
1,2,3,4,5,9,10,11,12,13, 19,20
我需要像这样的 1-5、9-13、19-20 这样的结果 我需要结果
解决方案
这是经典间隙和孤岛问题的孤岛部分(间隙部分是在每个孤岛之间寻找缺失值)。如果您搜索该术语,您会发现大量有关如何计算它们的材料。
一种方法(需要 Sqlite 3.25 或更新的窗口函数支持):
sqlite> CREATE TABLE ex(id INTEGER PRIMARY KEY);
sqlite> INSERT INTO ex VALUES (1),(2),(3),(4),(5),(9),(10),(11),(12),(13),(19),(20);
sqlite> WITH cte AS (SELECT id, id - row_number() OVER (ORDER BY id) AS grp FROM ex)
...> SELECT min(id) AS rangestart, max(id) AS rangeend FROM cte GROUP BY grp;
rangestart rangeend
---------- ----------
1 5
9 13
19 20
推荐阅读
- java - 将文本添加到元素数组列表
- javascript - 在组件外部运行的组织结构图 - Angular
- spring - Spring JPA:尝试删除具有外键约束的表中的记录
- angular - 我已经构建了一个自定义的表单控件,如何在 onInit 生命周期挂钩中订阅它的自定义事件?
- excel - 如何在与某个值范围的最后一个值关联的图表中动态插入水平线
- vue.js - 如何在路由vue js中调用元标题中的参数
- fhir-server-for-azure - 禁用搜索参数
- json - 使用 JQ 合并一个文件中的两个 JSON 片段
- vue.js - VUE预渲染页面的水化
- algorithm - 证明使用邻接矩阵进行二分测试有 Ω(n^2)