Comment sélectionner des lignes à partir de MySQL en fonction de la valeur maximale d'une colonne + un regroupement

J'ai une table qui contient (disons) toutes les fois où un utilisateur regardé une page web spécifique. Les utilisateurs peuvent bien sûr regarder une page plus d'une fois, donc il peut y avoir plusieurs entrées pour les utilisateurs et les pages, comme suit:

nid     time    user  page_id
 25     8000       4      467
 24     7000       1      482
 23     6000       1      484
 22     5000       1      482
 21     4000       5      467
 20     3000       4      467

Je veux faire une requête qui renvoie les lignes correspondant à chaque page consultées par tout utilisateur AVEC LA prise QUE si un utilisateur regardé une page plus d'une fois, j'obtiens la ligne correspondant à la plus récente de la vue (c'est à dire, la plus grande valeur de TEMPS). Donc, je devrais obtenir ceci:

nid     time    user  page_id
 25     8000       4      467
 24     7000       1      482
 23     6000       1      484
 21     4000       5      467

Nous perdons de la ligne 22, car l'utilisateur 1 a regardé à la page 482 à un moment plus tard, et nous perdons de la ligne 20, car l'utilisateur 4 regardé la page 467 à une date ultérieure.

J'ai presque cela compris, mais je ne peux pas le maîtriser, tout en convaincre moi-même que les résultats que j'obtiens sera généralement correcte et pas juste un accident de mon cas de test. Je garde un va-et-vient entre GROUP BY ou DISTINCT des requêtes et intégré des requêtes, et puis mon cerveau explose. Toutes les suggestions? Merci!

source d'informationauteur Jim Miller | 2011-01-28