Присоединяйтесь, используя время, чтобы получить несколько строк - PullRequest
1 голос
/ 17 марта 2012

У меня довольно сложная ситуация (по крайней мере, для меня).Я пытаюсь написать 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, который бы это сделал?

Ответы [ 4 ]

1 голос
/ 17 марта 2012
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 голосов
/ 17 марта 2012
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 голосов
/ 17 марта 2012

Попробуйте это:

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 голосов
/ 17 марта 2012
SELECT T1.Event,T1.HourId,T1.Start,T1.End
FROM Table1 T1,Table2 T2
WHERE T1.HourId=T2.HourID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...