निम्नलिखित समाधान:
- परीक्षण डेटा प्रदान करता है;
- एक आंतरिक क्वेरी जो अन्य अंतराल पैदा करती है; तथा
- यह SQL Server 2012 में काम करता है।
क्रमबद्ध पंक्तियों को क्रमिक रूप से "के साथ " क्लॉज में क्रमांकित किया जाता है और फिर पंक्ति संख्या पर एक आंतरिक जोड़ के साथ दो बार परिणाम का पुन: उपयोग करता है, लेकिन 1 से ऑफसेट करता है ताकि पंक्ति के साथ पंक्ति की तुलना करने से पहले, आईडी की तलाश में अधिक से अधिक अंतराल के साथ 1. अधिक के लिए कहा गया है, लेकिन अधिक व्यापक रूप से लागू है।
create table #ID ( id integer );
insert into #ID values (1),(2), (4),(5),(6),(7),(8), (12),(13),(14),(15);
with Source as (
select
row_number()over ( order by A.id ) as seq
,A.id as id
from #ID as A WITH(NOLOCK)
)
Select top 1 gap_start from (
Select
(J.id+1) as gap_start
,(K.id-1) as gap_end
from Source as J
inner join Source as K
on (J.seq+1) = K.seq
where (J.id - (K.id-1)) <> 0
) as G
भीतर का प्रश्न पैदा करता है:
gap_start gap_end
3 3
9 11
बाहरी क्वेरी पैदा करता है:
gap_start
3
LAG(id, 1, null)
साथ फ़ंक्शन का उपयोग कर सकते हैंOVER (ORDER BY id)
।