2012-03-16 2 views
1

J'ai une situation assez délicate (au moins pour moi). Je suis en train d'écrire une instruction SQL qui prendra une table d'événements qui ressemble à:Joindre en utilisant des temps pour aboutir à plusieurs lignes

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

et se joindre à une table de calendrier qui ressemble

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 

Et je veux que le résultat soit un record pour chacune des heures que l'événement enjambe:

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 

Une liste des heures seul ne suffit pas, je l'ai été en mesure d'obtenir jusque-là. J'ai besoin d'obtenir le résultat dans le format ci-dessus pour une utilisation dans un autre algorithme. Quelqu'un peut-il suggérer un SQL qui permettrait d'accomplir cela?

Répondre

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

Je ne crois pas que cela fonctionnera. Cela ne tient pas compte de toutes les heures dans le délai? – 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

Essayez ceci:

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

Ferme mais n'attrape pas tous les cas. –

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

c'est correct. – Turbot

Questions connexes