Chaque ligne est un événement qui a une date de debut et une date de fin.
J'ai besoin de savoir pour chaque évenements combien d'autres évènements se deroulent en même temps.
Je suis un peu perdu
:merci: d'avance
Version imprimable
Chaque ligne est un événement qui a une date de debut et une date de fin.
J'ai besoin de savoir pour chaque évenements combien d'autres évènements se deroulent en même temps.
Je suis un peu perdu
:merci: d'avance
Sans jeu d'essais ou exemple, dur de répondre :?
dans le cas de périodes identiques, le problème est assez simple, par contre si il s'agit de détecter des recoupement, c'est plus ennuyeux ...
Ex de post traitant de sujet "similaire" :
- Trouver le nombre max d'éléments apparu dans un intervale de temps
(N'hésite pas à rechercher d'autres exemples sur le forum)
Je vais clarifier.
J'ai les données Id, debut et fin (des logs en fait) et je cherche à remplir la colonne nb.
La colonne nb sert à dire que durant l'intervalle entre debut et fin, il y a eu en tous N logs.
Je ne veux pas particulièrement être précis: il s'agit de dire: durant cette période N logs ont été effectué, le logs en lui-même plus les autres qui couvre en partie ou totalement (peu importe).Code:
1
2
3
4
5
6
7
8 ID debut fin nb EMC 2006-10-02 11:39:04.000 2006-10-02 11:46:06.000 2 LGU 2006-10-02 11:39:35.000 2006-10-02 11:46:26.000 2 LVI 2006-10-02 11:48:40.000 2006-10-02 11:55:03.000 2 LGU 2006-10-02 11:49:17.000 2006-10-02 11:55:54.000 2 lau 2006-10-02 12:12:37.000 2006-10-02 12:19:35.000 2 LVI 2006-10-02 12:10:36.000 2006-10-02 12:23:07.000 2
Et là, je sais que c'est possible mais je suis incapable de formuler ça sous forme d'une requête SQL. :marteau:
Donc :merci: d'avance
OK, donc si on se base sur l'hypoythèse que tu souhaites récupérer tous les événements intervenus par rapport à une période donnée (periodeDeb, periodeFin), plusieurs cas peuvent se produire :Le cas ou l'événement est inclus à la période est déjà géré par les 2 premiers cas.
- periodeDeb < DateDebutEvt < periodeFin (l'événement a démarré durant la période)
- periodeDeb < DateFinEvt < periodeFin (l'événement s'est terminé durant la période)
- DateDebutEvt < periodeDeb ET DateFinEvt > periodeFin (l'événement englobe la période recherchée)
Donc en SQL, si debut et fin sont tes noms de champsça devrait donner qqchose comme ça :
Code:
1
2
3
4
5
6 SELECT COUNT(*) FROM Log WHERE periodeDeb < debut < periodeFin OR periodeDeb < fin < periodeFin OR (debut < periodeDeb AND fin > periodeFin);
Il faut implémenter le prédicats OVERLAPS, tel que je l'ai décrit ici : http://sqlpro.developpez.com/cours/gestiontemps/#L1.2.2
A +