我的表中有 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
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>