我有一个相当棘手的情况(至少对我而言)。我正在尝试编写一个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 :(得分: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"
答案 1 :(得分:0)
SELECT T1.Event,T1.HourId,T1.Start,T1.End
FROM Table1 T1,Table2 T2
WHERE T1.HourId=T2.HourID;
答案 2 :(得分: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
答案 3 :(得分: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)