首页 > 解决方案 > SQL 查询,如何按条件按顺序查找给定表中的第一个和最后一个值

问题描述

我的表中有 id,id 从 1 到 20 开始,我想要一个查询,以查找给定表中的第一条和最后一条记录,但我想要某些条件的结果。

例如:如果我有记录

1,2,3,4,5,9,10,11,12,13, 19,20

我需要像这样的 1-5、9-13、19-20 这样的结果 我需要结果

标签: androidsqlsqlite

解决方案


这是经典间隙和孤岛问题的孤岛部分(间隙部分是在每个孤岛之间寻找缺失值)。如果您搜索该术语,您会发现大量有关如何计算它们的材料。

一种方法(需要 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

推荐阅读