Question

Je fais le suivi des pages vues dans les modules à l'aide du tableau suivant:

id | page_id | user_id | session_id | created

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

J'essaie d'écrire une requête qui m'indique quand une session d'affichage 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 renvoyer le plus tôt 'créé' (l'heure de début de la session de visionnage) et le dernier page_id (jusqu'où ils sont arrivés dans le module).

Quel est le meilleur moyen d'y parvenir?

Était-ce utile?

La solution

Je pense que vous devrez 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

Autres conseils

SELECT  MIN(created), MAX(page_id)
FROM    modules
GROUP BY
        session_id
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top