2013-03-18 5 views
-1

두 개의 테이블이 있습니다.시간 범위에 대한 쿼리에 가입하십시오.

MAP

Product Channel ProgDate AdvTime 
Air Pix 30-04-2011 20:57:16 
Air Pix 30-05-2011 00:55:08 

MBA 내가 MAP에서 MBA 테이블의 StartTime & EndTime 사이 AdvtTime 여부를 확인해야

Product Channel Date ProgStartTime ProgEndTime 
Air Pix 30-04-2011 23:00:00 02:00:00 
Air Pix 30-04-2011 21:00:00 22:00:00 

.

그러나 기간 (ProgStartTime - ProgEndTime)이 1 시간이면 + 또는 --5 분의 버퍼가 필요합니다.

나는 02:00:0000:05:08 to match 23:00:0022:00:0020:57:16 to match 21:00:00이 필요합니다.

내가 중복 된 질문을하지 않는

Select Distinct mb.Id as mbaid,mp.id as mapid, mp.Channel as Channel, mp.Product,mp.ProgDate, mp.AdvTime, mb.Channel, mb.ProgStartTime, 
    mb.ProgEndTime, convert(time, dateadd(minute, datediff(minute, mb.progStartTime, mb.progEndTime), 0)) as timeDiff from map22 as mp inner join mba22 as mb 
on ((mp.ProgDate = mp.ProgDate and mp.Channel=mb.Channel and mp.Product=mb.Product)) 
where (mp.ProgDate = mb.ProgDate 
      AND AdvTime >= ProgStartTime 
      AND (AdvTime <= ProgEndTime OR ProgEndTime < ProgStartTime)) 
      OR 
      (mp.ProgDate = Dateadd(day,1,mb.ProgDate) 
      AND ProgEndTime < ProgStartTime 
      AND AdvTime <= ProgEndTime) 
order by mp.Id asc 
+0

하십시오 가입 아래의 쿼리를 사용 - http://stackoverflow.com/questions/15477708/sql-join-with-a-buffer- 시간 – rbedger

+0

유감스럽게도 나는 내 질문이 명확하게 짜 맞춰진 것처럼 적절한 결과를 얻지 못했다. 누군가가이 시나리오에서 나를 도와 줄 수 있습니까 –

+0

테이블에 대한 열 데이터 유형 세부 정보를 제공 할 수 있습니까? –

답변

0
Select Distinct mb.Id as mbaid, 
     mp.id as mapid, 
     mp.Channel as Channel, 
     mp.Product, 
     mp.ProgDate, 
     mp.AdvTime, 
     mb.Channel, 
     mb.ProgStartTime, 
     mb.ProgEndTime, 
     convert(time, dateadd(minute, datediff(minute, mb.progStartTime, mb.progEndTime), 0)) as timeDiff 
From map22 as mp 
Inner Join mba22 as mb 
     on mp.ProgDate = mp.ProgDate 
     and mp.Channel= mb.Channel 
     and mp.Product= mb.Product 
Where mp.ProgDate = mb.ProgDate 
And  Convert(DateTime,ProgDate) + Convert(DateTime,AdvTime) 
      Between 
      Case 
      When ProgEndTime < ProdStartTime And DateDiff(hh,ProgEndTime,ProgStartTime) > 23 Then DateAdd(mi,-5,Convert(DateTime,[Date]) + Convert(DateTime,ProgStartTime)) 
      When ProgEndTime > ProdStartTime And DateDiff(hh,ProgStartTime,ProgEndTime) > 1 Then DateAdd(mi,-5,Convert(DateTime,[Date]) + Convert(DateTime,ProgStartTime)) 
      Else Convert(DateTime,[Date]) + Convert(DateTime,ProgStartTime) End 
      And 
      Case 
      When ProgEndTime < ProdStartTime And DateDiff(hh,ProgEndTime,ProgStartTime) > 23 Then DateAdd(mi,5,Convert(DateTime,Case When ProgEndTime < ProdStartTime Then DateAdd(dd,1,[Date]) Else [Date] End) + Convert(DateTime,ProgEndTime)) 
      When ProgEndTime > ProdStartTime And DateDiff(hh,ProgStartTime,ProgEndTime) > 1 Then DateAdd(mi,5,Convert(DateTime,Case When ProgEndTime < ProdStartTime Then DateAdd(dd,1,[Date]) Else [Date] End) + Convert(DateTime,ProgEndTime)) 
      Else (Case When ProgEndTime < ProdStartTime Then DateAdd(dd,1,Convert(DateTime,[Date])) Else Convert(DateTime,[Date]) End) + Convert(DateTime,ProgEndTime) End 
Order By mp.Id Asc 
+0

시간 주셔서 감사 합니다만 [progstarttime -progendtime] 기간이 1 시간 이하인 경우에만 5 분 버퍼가 필요합니다. 또한 다음 날의 값 , 즉 00:05:08과 23:00:00 ~ 02:00:00, –

+0

을 일치시킬 수 없습니다. 다시 시도해주세요. 다시 작동하면 다시 정리해 드리겠습니다. –

+0

죄송합니다. 자정을 넘는 시간이 아직 보이지 않습니다. –

관련 문제