2010-03-21 13 views
0

Ceci est mon exemple de ma table:MYSQL requête distincte

id | name | foreign_id | 
------------------------- 
1 a  100 
2 b  100 
3 c  100 
4 d  101 
5 a  102 
6 b  102 
7 c  102 

Je voudrais obtenir le fichier distinct avec le dernier foreign_id (plus grand nombre, mais pas nécessairement le plus grand). Dans cet exemple, il s'agirait d'une ligne avec les ID 4,5,6,7. Quelqu'un a une idée? Merci beaucoup!

Répondre

2

Pourriez-vous essayer quelque chose comme ci-dessous: -

SELECT Id,Table1.Name,Table1.Fid FROM Table1 INNER JOIN 
(SELECT Name,Max(FId) AS FId FROM Table1 Group By Name) 
Table2 ON Table1.FId=Table2.FId AND Table1.Name=table2.Name 

Cela fonctionne dans Sql Server atleast. S'il vous plaît vérifier dans MySQL. Désolé, je n'ai pas MySQL pour tester cela.

+0

testé et fonctionne parfaitement! – Patrick

0

SELECT * DE nom_table OÙ foreign_id> 100

+0

geff, j'ai édité ma question pour clarifier un peu. – Patrick

+0

@Patrick: La requête mise à jour répond-elle à votre question maintenant? – geffchang

0

Vous pouvez faire quelque chose comme:

select * 
from table_name 
where max_id_you_want = (select max(id_you_want) from table_name) 
+0

Cette liste 5,6 et 7 et ne liste pas 4 comme demandé dans la question. –

+0

oui, mais c'est un moyen de la solution. Je suppose que l'identifiant le plus récent sera le plus grand ou que vous auriez besoin de trouver un autre moyen de l'obtenir. pour obtenir l'ensemble de tous les identifiants qui sont les meilleurs, vous pouvez faire quelque chose comme select any de some_table où id_you_want est (requête renvoyant le résultat que vous recherchez) –

1

On dirait que vous voulez juste ceci:

SELECT name, MAX(foreign_id) 
FROM table 
GROUP BY name; 

Si vous avez besoin de l'ID (je devine que vous ne sera pas, puisque le nom et foreign_id devrait probablement être unique, rendant inutile la colonne ID), je pense que MySQL vous permettra de l'obtenir en ajoutant simplement cette colonne à la liste SELECT - bien que ce soit du SQL non-standard. Si vous voulez SQL standard, alors vous voulez quelque chose comme Ashish a écrit.

0
SELECT * FROM table 
GROUP BY name 
having MAX(foreign_id);