2010-12-13 1 views
1

Imaginez que vous ayez une table avec 2 colonnes: ID et NOM. ID est simplement un nombre, incrémentant pour chaque ligne (comme vous vous en doutez). NAME est une chaîne varchar aléatoire. NAME peut être identique pour différentes lignes. Maintenant, imaginez que vous voulez obtenir les 3 dernières occurrences dans cette table, où NAME seulement peut se produire une fois.MySQL - Est-il possible d'y parvenir en utilisant SQL?

Par exemple, si vous avez ces données:

ID NAME 
1 HELLO 
2 TEST 
3 HELLO 
4 HELLO 
5 QWERTY 
6 HELLO 

Ensuite, le résultat de la question devrait être:

6 HELLO 
5 QWERTY 
2 TEST 

Est-il possible d'atteindre ce niveau sur SQL?

+0

Veuillez renommer la question en quelque chose comme 'Obtenir les dernières occurrences de texte' si similaires sont minimisés et il est plus facile pour quelqu'un de trouver cette solution. – HyderA

Répondre

5
SELECT 
    MAX(ID), 
    Name 
FROM 
    table 
GROUP BY 
    Name 
ORDER BY 
    MAX(ID) desc 
LIMIT 3 
3
SELECT MAX(ID), NAME 
FROM THAT_TABLE 
GROUP BY NAME 

Voir: GROUP BY (Aggregate) Functions

+0

Vous devez ajouter 'LIMIT 3' à la fin de cela. – AgentConundrum

+0

Je viens de relire la question. La réponse de Macy est plus proche et meilleure! –

0

Je suppose, vous devez utiliser "DISTINCT" pour la colonne "nom":

SELECT DISTINCT name, id FROM table_name ORDER BY id DESC LIMIT 3; 

Une autre façon d'y parvenir est d'utiliser "GROUP BY" pour "nom" (voir une autre réponse)

Questions connexes