J'ai une table SQL Events (ID int, Event int, StartTime datetime, Duration int
).sélectionnez événements chevauchement datetime avec SQL
Event
est le code d'événement (1 = fonctionnement du système, 2 = pause)
Duration
est le nombre de secondes que l'événement est actif.
J'aimerais obtenir la quantité de secondes événement 1 était actif, mais soustraire la durée de l'événement .
E.g. l'événement 1 était de 1h00 à 6h00, l'événement 2 de 0h00 à 2h00 et l'événement 2 de 5h00 à 6h00. La durée totale devrait être de 2h00 à 5h00 -> 3 heures.
Il est possible que je peux penser à: pour chaque événement trouver tous événements 2 qui peuvent recouper avec l'événement 1, et pour chaque événement dans cet ensemble: TRIM sa durée pour obtenir seulement partie qui était active pendant son événement 1.
par exemple pour mon événement 1 (1:00 - 6:00) je trouverai l'événement 2 (0:00 - 2:00), obtenir seulement la partie qui m'intéresse (1: 00-2: 00); trouver un autre événement 2 (5: 00-6: 00), obtenir la partie qui m'intéresse (c'est tout l'événement 5: 00-6: 00) - qui résume deux heures. La durée totale de l'événement 1 était de 5 heures; 5 heures - 2 heures (événement 2) est de 3 heures.
Mais cela ne fonctionnera pas s'il y a des milliers d'événements dans le laps de temps spécifié, donc je préfère un conseil de solution sans boucles (curseurs).