2012-03-16 4 views
1

나는 (적어도 나에게) 상당히 까다로운 상황이 있습니다. 나는처럼 보이는 이벤트 테이블 소요됩니다 SQL 문 작성하려고 해요 :시간을 사용하여 여러 행에 결과 표시

Event HourId  Start     End 
Event1 1203170200 3/17/2012 02:30:00 PM 3/17/2012 04:15:00 PM 

을 그리고

HourId  Start     End 
1203170200 3/17/2012 02:00:00 PM 3/17/2012 02:59:59 PM 
1203170300 3/17/2012 03:00:00 PM 3/17/2012 03:59:59 PM 
1203170400 3/17/2012 04:00:00 PM 3/17/2012 04:59:59 PM 
1203170500 3/17/2012 05:00:00 PM 3/17/2012 05:59:59 PM 

처럼 보이는 달력 테이블과 조인을 그리고 결과가되고 싶어요 이벤트가 진행되는 각 시간에 대해 기록하십시오.

Event HourId  Start     End 
Event1 1203170200 3/17/2012 02:30:00 PM 3/17/2012 04:15:00 PM 
Event1 1203170300 3/17/2012 02:30:00 PM 3/17/2012 04:15:00 PM 
Event1 1203170400 3/17/2012 02:30:00 PM 3/17/2012 04:15:00 PM 

시간 목록만으로는 충분하지 않습니다. 다른 알고리즘에서 사용하기 위해 위의 형식으로 결과를 가져와야합니다. 누구든지이 일을 수행 할 수있는 SQL을 제안 할 수 있습니까?

답변

0
SELECT T1.Event,T1.HourId,T1.Start,T1.End 
FROM Table1 T1,Table2 T2 
WHERE T1.HourId=T2.HourID; 
+0

나는이 작동합니다 생각하지 않습니다. 시간대의 모든 시간을 설명하지는 않습니까? – Paul

0
select 
    e.event, 
    c.hourid, 
    e.start, 
    e.end 
from event e 
inner join calendar c on 
    e.start between c.start and c.end 
    or 
    e.end between c.start and c.end 
    or 
    trunc(e.start, 'hour') <= trunc(c.start, 'hour') 
    and 
    trunc(e.end, 'hour') >= trunc(c.end, 'hour') 
order by c.hourid 
0

이 시도 :

select ee.event,cc.hourId,ee.start,ee.end 
from calend cc 
join event ee on (cc.Start between ee.Start and ee.end) or 
       (cc.EndD between ee.Start and ee.End) 
+0

닫기하지만 모든 경우를 포착하지는 않습니다. –

1
SELECT 
    e.Event, 
    c.HourId, 
    e."Start", 
    e."End" 
FROM Events e 
    INNER JOIN Calendar c ON c."Start" <= e."End" 
         AND e."Start" <= c."End" 
+0

이것이 맞습니다. – Turbot

관련 문제