2009-08-12 8 views
0

Im essayant de calculer (et échouer) comment je peux obtenir le nombre de sessions (en utilisant simplement ce terme de manière générique, ne vous inquiétez pas trop) par seconde. C'est à dire. Je cherche la rétention.mySQL - résultats par nombre de secondes

J'ai une table qui est mise à jour périodiquement avec le nombre de secondes qu'une session est active.

Je veux obtenir une liste de: -

MAX (`temps) - à savoir le plus grand nombre de secondes pour une session.

ENTRAÎNÉ: secondes: nombre de sessions sur ce deuxième

La façon dont j'ai faffing avec est

SELECT `projID`, COUNT(`sessionID`) AS `noSessions`, 
    MAX(`time`) as `endTime` 
FROM `MetricsLive` 
GROUP BY `sessionID` 
ORDER by `endTime` ASC 

Mais qui est loin d'être ce que je dois, mais je suis tout à fait perdu. Des idées?

PARDONNER FORMATAGE: -

LES DONNÉES TABLEAU ROW J'AI EST AS: -

SESSSION \\ SECONDS 
ebsvmcrbob2irbobsrvu2hcfi5 \\ 4 
ebsvmcrbob2irbobsrvu2hcfi5 \\ 12 
ebsvmcrbob2irbobsrvu2hcfi5 \\ 18 
ebsvmcrbob2irbobsrvu2hcfi5 \\ 24 
ebsvmcrbob2irbobsrvu2hcfi5 \\ 32 

etc. Il roule l'insertion d'une nouvelle ligne à chaque fois est une nouvelle entrée. L'idée ici est de déduire après combien de temps la session s'est terminée. Je veux donc le résultat de

NoSessionsEnded \\ ATSECONDS 
4 \\ 12 
8 \\ 24 etc. 
+0

Les exemples que vous donnez ne semblent pas correspondre. Quel serait le résultat attendu si la table contenait uniquement les lignes que vous avez listées? – Andomar

Répondre

0

Vous pouvez utiliser la fonction UNIX_TIMESTAMP() pour convertir une date au nombre de secondes depuis 1970. Si vous groupe à ce sujet, COUNT (*) retourne le nombre de lignes partageant la même seconde:

SELECT 
    projID, 
    COUNT(*) AS MaxSessionsPerSecond 
FROM MetricsLive 
GROUP BY UNIX_TIMESTAMP(endTime) 
ORDER BY COUNT(*) DESC 
LIMIT 1 

Les lignes ORDER BY et LIMIT sélectionnent le projID avec le nombre maximal de sessions par seconde.

Si vous cherchez le taux maximum de session pour chaque projet, essayez:

SELECT 
    projID, 
    MAX(SessionsPerSecond) as MaxSessionsPerSecond 
FROM (
    SELECT 
     projID, 
     COUNT(*) AS SessionsPerSecond 
    FROM MetricsLive 
    GROUP BY UNIX_TIMESTAMP(endTime) 
) sub 
+0

Je devrais peut-être éclairer cela plus loin en disant que 'time' n'est pas un champ timestampped. C'est simplement un nombre de secondes. C'est à dire. 4, 12 etc. – waxical

+0

Que représente le champ temporel? Nombre de secondes depuis une date spécifique? Durée de la session? Ou autre chose? – Andomar

+0

Eh bien. il y aura plusieurs entrées pour une session, si vous voulez, c'est un enregistrement du nombre de secondes qu'une session a été active. Donc, durée de la session. Mais comme il roule j'ai besoin du dernier nombre le plus élevé (c'est-à-dire quand la dernière session a été enregistrée active.) – waxical

Questions connexes