sql - Find consecutive free numbers in table -


i have table, containing numbers (phone numbers) , code (free or not available).

now, need find series, of 30 consecutive numbers, 079xxx100 - 079xxx130, , of them have free status.

here example how table looks like:

create table numere (     value int,     code varchar(10) );   insert numere (value,code) values  (123100, 'free'),  (123101, 'free'), ...  (123107, 'booked'),  (123108, 'free'),  (...  (123130, 'free'),  (123131, 'free'),  ...   (123200, 'free'),  (123201, 'free'), ...  (123230, 'free'),  (123231, 'free'),  ... 

i need sql query, me in example, 123200-123230 range (and next available ranges).

now, found example, doing more or less need:

select value, code numere value >= (select a.value                 numere                 left join numere b on a.value < b.value                                     , b.value < a.value + 30                                     , b.code = 'free'                 a.code = 'free'                 group a.value                 having count(b.value) + 1 = 30) limit 30 

but returning first 30 available numbers, , not within range (0-30). (and takes 13 minutes execute, hehe..)

if has idea, please let me know (i using sql server)

this seems works in dataset. modify select , see if works table name.

declare @numere table ( value int, code varchar(10) );   insert @numere (value,code) select 123100, 'free'  while (select count(*) @numere)<=30 begin     insert @numere (value,code) select max(value)+1, 'free' @numere end  update @numere set code='booked' value=123105  select * @numere n1 inner join @numere n2 on n1.value=n2.value-30     , n1.code='free'     , n2.code='free' left join @numere n3 on n3.value>=n1.value     , n3.value<=n2.value     , n3.code<>'free' n3.value null 

Comments