Requête de requête MySQL pour commander les données de deux manières
-
08-07-2019 - |
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?
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