Pas besoin.
On a deux types d'événements :
- quelqu'un se connecte (le nombre de connexions simultanées est incrémenté)
- quelqu'un se déconnecte (le nombre de connexions simultanées est décrémenté)
Donc on commence par faire la liste de ces événements :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| with evnt as
(
-- connexion
select distinct
conf_id
, heure_debut as heure
from t_session
union
-- deconnexion
select distinct
conf_id
, heure_fin
from t_session
) |
À partir de là, on cherche le nombre de connexions qu'il y a eu pour chacun de ce événements :
1 2 3 4
| from evnt e
inner join t_session s
on ( e.conf_id = s.id
and e.heure between s.heure_debut and s.heure_fin ) |
On compte le nombre de connexions simultanées :
count(s.id) as nb_sessions ... group by e.conf_id, e.heure
Et enfin on prend le max pour chaque conférence.
Ça, c'est pour trouver le nombre de connexions simultanées.
Pour le nombre de connexions pendant une plage horaire particulière (1 minute), c'est différent.
Partager