2013-02-06 1 views
0

SQL Server 2008 R2에서 날짜 범위의 겹침 및 겹침을 식별하는 쿼리가 있습니다. 고유 한 각 데이터 세트에는 12 개의 레코드가 있습니다. 내가하고 싶은 것은 갭을 식별하고 중복되는 코드를 조정하거나 추가하여 순차적으로 레코드를 업데이트하는 것입니다.SQL Gap Overlap DateRanges

e     Read_Start Read_End Source 
10032789402145965 2011-01-21 2011-02-22 867_03_1563303 
10032789402145965 2011-02-22 2011-03-21 867_03_1665865 
10032789402145965 2011-03-26 2011-04-20 867_03_1782993 
+0

. . 웬일인지, 내가 추가하고 싶은 코드로 질문을 편집 할 수는 있지만, 그것을 내 솔루션에 넣을 수는 없습니다. 누군가 그것을 옮기고 싶다면 고마워. 어쨌든, 이것이 당신이 원하는대로합니까? –

+0

고든 (Gordon)이 작성한 코드를 자신의 게시물로 옮겼습니다. 그것을 확인하시기 바랍니다. –

답변

1

글쎄, 당신은 단지 다음 값을 기준으로 각 레코드에 새 Read_end을 지정할 수 있습니다 :

--gaps and overlaps tbl_volumes 
with s as 
(
select esiid,Read_Start,Read_End ,row_number() over(partition by esiid order by Read_Start) rn 
from tbl_Volumes 
where Status=0 
group by esiid,Read_Start,Read_End) 
select a.esiid, a.Read_Start, a.Read_End, b.Read_Start as nextstartdate,datediff(d,a.Read_End, b.Read_Start) as gap 
into #go 
from s a 
join s b on b.esiid = a.esiid and b.rn = a.rn + 1 
where datediff(d, a.Read_End, b.Read_Start) not in (0,1) 
order by a.esiid 

는 여기에 순차적보고 싶은 나쁜 레코드 집합이다. 새 시작에 대한 계산은 다음과 같이 수행 할 수 있습니다.

select t.*, 
     (select top 1 Read_Start 
     from t t2 
     where t2.e = t.e and t2.Read_Start > t.Read_Start 
     order by t2.Read_Start 
     ) as New_Read_End 
from t 

실제로 값을 업데이트 하시겠습니까?

+0

값을 업데이트하고 싶습니다. –

+0

여기 고든이 간다. –

+0

@ JasonSquires. . . 업데이트는'toupdate with () toupdate set Read_end = new_Read_End'로 업데이트됩니다. 나는 대답을 수정 하겠지만, StackOverflow는 나를 두지 않는다. –