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
Post a Comment