2009-11-17 6 views
0

J'ai un problème pour commander mes résultats correctement lorsque vous utilisez le groupe. Il semble montrer la première entrée dans la base de données au lieu de la plus récente dans le groupe.Comment regrouper et commander correctement

Exemple:

id (autoincrement) | nom
1 | anne
2 | james
3 | anne
4 | brad

Comme vous pouvez le voir, j'ai "anne" entré plusieurs fois, c'est pourquoi j'utilise le groupe par. Je voudrais alors afficher le "anne" qui est le plus récent, ce qui serait l'entrée "3". Au contraire, il affiche le premier "Anne" (1)

Ma requête

« SELECT * FROM TABLE GROUP BY nom ORDER BY id DESC

Toute aide serait grandement appréciée.

Répondre

0

Essayez ceci, il fonctionnera:

SELECT * FROM TABLE 
    INNER JOIN (SELECT MAX(id) AS id 
       FROM TABLE 
       group by name) 
    ids ON TABLE.id = ids.id 
2

Une solution possible:

SELECT id, name 
FROM TABLE 
WHERE id IN (SELECT MAX(id) FROM TABLE GROUP BY name) 
4

Le problème est que vous choisissez tous les champs (en utilisant * est rarement une bonne idée) de sorte que chaque ligne est donc unique, il n'y a rien à groupe sur.

Essayez:

SELECT 
    Name, 
    MAX(ID) 
FROM 
    TABLE 
GROUP BY 
    Name 
0

Essayez

SELECT DISTINCT name 
FROM table 
ORDER BY id DESC 
0

bâtiment sur un autre anwer déjà fourni, ce SQL évitera d'avoir à GROUP BY Nom:

SELECT 
    DISTINCT Name, 
    MAX(ID) 
FROM 
    TABLE 
Questions connexes