2014-12-03 4 views
0

이것은 이전에 대답했을 수도 있지만 검색 방법을 찾을 수 없으므로 중복되는 경우 사과드립니다. 숫자가 순차적으로 저장되는 정수 열이있는 테이블이 있습니다. 정수 테이블에서 범위를 추출하는 SQL 쿼리

숫자의 일부 인해 행의 제거에없는 : 내가 원하는 무엇

+-------+ 
| _auto | 
+-------+ 
| 0 | 
| 1 | 
| 2 | 
| 5 | 
| 6 | 
| 7 | 
| 9 | 
| 11 | 
| 12 | 
| 13 | 
| 14 | 
| 16 | 
| 17 | 
| 19 | 
| 20 | 
+-------+ 

는 테이블이 컬럼에 대한 범위로 구성되어 준 SQL 쿼리를 작성하는 것입니다.

+----+----+ 
| F | T | 
+----+----+ 
| 0 | 2 | 
| 5 | 7 | 
| 9 | 9 | 
| 11 | 14 | 
| 16 | 17 | 
| 19 | 20 | 
+----+----+ 

내가 QT4 :: QSqlDatabase 드라이버를 사용할 것, 그래서 호환 데이터베이스 (ANSI의 SQL)에 대한 작업의 경우가 좋은 것뿐만 아니라, PostgreSQL을.

나는이 알고리즘을 믿는다. (1) 값이있는 행이없는 행을 선택하십시오. _auto + 1; (2) 동일하지만, _auto-1; (3) 노조가이 두 가지를 선택합니다.

그러나 처음 두 선택을 작성하는 방법을 알지 못합니다.

답변

2

숫자 시퀀스에는 속성이 있습니다. 시퀀스를 빼면 그 결과는 상수입니다. 다음 쿼리는이 관찰을 사용합니다.

select min(_auto) as f, max(_auto) as t 
from (select n._auto, row_number() over (order by n._auto) as seqnum 
     from numbers n 
    ) n 
group by (_auto - seqnum);