0

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

例如:如果我有记录

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

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

4

2 回答 2

1

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

一种方法(需要 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
于 2019-10-28T07:56:49.033 回答
-1

SQL Query 查找表中的第一条记录:

SELECT * FROM <table_name> ORDER BY <column_name> ASC LIMIT 1

SQL 查询以查找表中的最后一条记录:

SELECT * FROM <table_name> ORDER BY <column_name> DESC LIMIT 1

例如:如果我有记录 1,2,3,4,5,9,10,11,12,13, 19,20

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

如果您需要像您提到的那样的结果,那么您可以LIMIT在查询中设置以获取该查询中可以有多少条记录。

询问:

SELECT * FROM <table_name> LIMIT <any_number>
于 2019-10-28T07:19:19.433 回答