2011-07-06 8 views
0

나는 현재 데이터베이스가 같은 시간 슬롯을 저장하는 이벤트 관리 시스템 개발입니다 : Duration이 시간에 DOUBLE하고 DateTimeTIMESTAMP입니다감지 교차 여부를

SlotId | DateTime   | Duration 
-------+---------------------+--------------- 
1  | 2011-06-06 15:00:00 | 5.0 
2  | 2011-06-06 14:00:00 | 3.0 
3  | 2011-06-07 11:00:00 | 8.0 

하는 것으로합니다.

표에서

, 우리는 분명히 타임 슬롯 반면, 1 & 3가 충돌하지 않는 2 & 3 시간 슬롯을 시간 슬롯 1과 2의 충돌을 볼 수 있습니다. 두 타임 슬롯 사이의 충돌을 탐지하는 SQL 문을 작성하려면 어떻게해야합니까?

답변

1

아마도 혼란 스러울 지 모르지만,이 세 시간대가 모두 겹치는 것처럼 보입니다. 11:00 - 19:00, 14:00 - 17:00 및 15:00 - 20:00에 각각 진행되기 때문에 (시작과 시간 순서가 역순으로 표시됩니다.) 하지만 여기서 테이블을 올바르게 이해하면 겹침을 찾는 코드가 있습니다.

SELECT CONCAT(T1.SlotId, ' Overlaps ', T2.SlotId) 
FROM YourTable AS T1 JOIN YourTable AS T2 
WHERE T1.SlotId <> T2.SlotId AND 
    T1.DateTime <= T2.DateTime AND 
    DATE_ADD(T1.DateTime,INTERVAL SEC_TO_TIME(T1.Duration * 3600) HOUR_SECOND) > T2.DateTime 
+0

죄송합니다. 나는 복사 후 붙여 넣기 값을 변경했다고 생각했는데 – mauris

+0

고맙다. 응용 프로그램에 맞게 약간 수정했습니다. – mauris

관련 문제