SQL Query, Как найти первое и последнее значение в данной таблице нужно по последовательному порядку с условиями - PullRequest
0 голосов
/ 28 октября 2019

У меня есть идентификаторы в моей таблице, идентификаторы начинаются с 1 до 20, я хочу запрос, чтобы найти первую и последнюю записи в данной таблице, но я хочу получить результат по некоторому условию.

Например: если у меня есть запись

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

Мне нужен результат, подобный 1-5, 9-13, 19-20, как этот, мне нужны результаты

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Это часть острова классической проблемы пробелов и островков (часть пробелов находит пропущенные значения между каждым островом). Если вы ищете этот термин, вы найдете массу материала о том, как их вычислить.

Один подход (для поддержки оконной функции требуется 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
0 голосов
/ 28 октября 2019

SQL-запрос для поиска первой записи в вашей таблице:

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 в своем запросе, чтобы получить, сколько записей вы можете иметь в этом запросе.

QUERY:

SELECT * FROM <table_name> LIMIT <any_number>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...