Comment sélectionner les deux derniers enregistrements pour chaque topic_id dans MySQL
J'ai pour sélectionner les deux derniers enregistrements pour chaque sujet.
ex:
tableau: msg
id | topic_id
------------
1 | 1
2 | 1
3 | 1
4 | 1
5 | 2
6 | 2
7 | 2
8 | 3
9 | 3
10 | 3
Je veux obtenir ces lignes:
3 1
4 1
6 2
7 2
9 3
10 3
Comment puis-je faire cela?
grâce
existe-il des raccourcis, on peut supposer? par exemple, dans les données ci-dessus votre id est croissant avec pas de trous et de l'ascendant id vous avez également croissant topic_id - si l'on peut supposer que ça va faire des requêtes plus facile. une autre approche pourrait utiliser l'hypothèse qu'il y a au moins deux entrées pour chaque topic_id. peut-on supposer que?
OriginalL'auteur Luca Romagnoli | 2010-04-07
Vous devez vous connecter pour publier un commentaire.
OriginalL'auteur Robin
Un travail autour de SQL qui ne supporte pas la Limite suivie par une clause est simple. Tout simplement construire une autre sous-requête au sein de votre DANS la Clause. Donc, par exemple.
Laissez-moi savoir comment cela fonctionne pour vous.
OriginalL'auteur Mike Silvis
Vous pourriez
EDIT:
Comme il semble que mysql ne permet pas (pour l'instant! il sera possible dans les prochaines versions) à la LIMITE d'utilisation des sous-requêtes voici une solution généralisée (sans couper les hypothèses, sauf que le msg.id est unique par topic_id):
bien sûr, ce n'est pas agréable, mais vous y êtes. Si l'hypothèse que les id dans topic_id sont en ordre croissant sans les trous peuvent être réalisés, d'autres améliorations à la requête peut être faite.
de réponses mis à jour pour compenser la limite mysql que je n'étais pas au courant.
OriginalL'auteur Unreason
Je voudrais savoir une meilleure réponse à cette question mais, à la suite de la requête fonctionne.
OriginalL'auteur Salil