Si vous avez la fonction de rang() mais pas la fonction lag() (en d'autres termes, SQL Server), vous pouvez l'utiliser (suggérée par http://www.sqlmonster.com/Uwe/Forum.aspx/sql-server-programming/10594/Return-gaps-in-a-sequence):
create table test_gaps_in_sequence (x int)
insert into test_gaps_in_sequence values (1)
insert into test_gaps_in_sequence values (2)
insert into test_gaps_in_sequence values (4)
insert into test_gaps_in_sequence values (5)
insert into test_gaps_in_sequence values (8)
insert into test_gaps_in_sequence values (9)
insert into test_gaps_in_sequence values (12)
insert into test_gaps_in_sequence values (13)
insert into test_gaps_in_sequence values (14)
insert into test_gaps_in_sequence values (29)
...
select lower_bound
, upper_bound
from (select upper_bound
, rank() over (order by upper_bound) - 1 as upper_rank
from (SELECT x+n as upper_bound
from test_gaps_in_sequence
, (SELECT 0 n
UNION
SELECT -1
) T
GROUP BY x+n
HAVING MAX(n) = -1
) upper_1
) upper_2
, (select lower_bound
, rank() over (order by lower_bound) as lower_rank
from (SELECT x+n as lower_bound
from test_gaps_in_sequence
, (SELECT 0 n
UNION
SELECT 1
) T
GROUP BY x+n
HAVING MIN(n) = 1
) lower_1
) lower_2
where upper_2.upper_rank = lower_2.lower_rank
order by lower_bound
... ou, pour inclure les « limites extérieures »:
select lower_bound
, upper_bound
from (select upper_bound
, rank() over (order by upper_bound) - 1 as upper_rank
from (SELECT x+n as upper_bound
from test_gaps_in_sequence
, (SELECT 0 n
UNION
SELECT -1
) T
GROUP BY x+n
HAVING MAX(n) = -1
) upper_1
) upper_2
full join (select lower_bound
, rank() over (order by lower_bound) as lower_rank
from (SELECT x+n as lower_bound
from test_gaps_in_sequence
, (SELECT 0 n
UNION
SELECT 1
) T
GROUP BY x+n
HAVING MIN(n) = 1
) lower_1
) lower_2
on upper_2.upper_rank = lower_2.lower_rank
order by coalesce (lower_bound, upper_bound)
Il est très difficile de sélectionner des données qui est en réalité pas là. –
De commentaires, il devient clair que vous exécutez ici SQL Server. Vous auriez vraiment dû le dire dans votre question, ou utilisé une balise pour l'indiquer ([SQL] est une balise générique pour les questions SQL, pas pour SQL Server). –