2009-05-07 4 views
1

Je suivi des pages vues dans les modules en utilisant le tableau suivant:données de commande MySQL requête de deux façons

id | page_id | user_id | session_id | created 

Chaque page est unique à un certain module; la page 14 n'existe donc que dans le module 2, par exemple.

J'essaie d'écrire une requête qui me dit quand une session de visualisation a commencé (GROUP BY session_id) pour un module particulier, mais j'ai des problèmes avec ma commande. Fondamentalement, pour cette session groupée, je veux retourner le plus tôt 'créé' (l'heure de début de la session de visualisation) et le dernier page_id (à quelle distance ils ont eu dans le module).

Quelle est la meilleure façon d'y parvenir?

+0

Merci tout le monde! – thekevinscott

+0

Pourriez-vous s'il vous plaît fournir quelques exemples de données et le résultat souhaité? – Quassnoi

Répondre

3

Je pense que vous aurez besoin d'utiliser des sous-requêtes dans la sélection:

SELECT a.session_id, MIN(a.created) as start_time, 
b.page_id AS last_page, b.end_time 
FROM table a 
INNER JOIN 
    (SELECT b.session_id, MAX(b.created) as end_time, MAX(b.page_id) 
    FROM table b GROUP BY b.session_id) 
ON a.session_id = b.session_id GROUP BY a.session_id 
2
SELECT MIN(created), MAX(page_id) 
FROM modules 
GROUP BY 
     session_id 
+0

Je ne crois pas que cela montrera les résultats souhaités - le MAX (page_id) je pense que doit correspondre à la dernière fois créé. – BrynJ

+0

@BrynJ: Sur la base de la définition de l'OP de «jusqu'où ils sont allés dans le module» @Quassnoi aurait toujours raison. – Tomalak

Questions connexes