2012-03-16 21 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 2012-03-16 21:00:54

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

關閉但它並沒有捕獲所有情況。 – 2012-03-17 11:08:50

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 2012-03-18 16:26:31

相關問題