2010-04-27 8 views
2

Je voudrais sélectionner toutes les colonnes d'une table, mais ils veulent avoir des valeurs distinctes sur un seul attribut de mes lignes (Ville dans l'exemple). Je ne veux pas de colonnes supplémentaires comme count ou quoi que ce soit, juste un nombre limité de résultats, et il semble qu'il ne soit pas possible de LIMITER directement les résultats dans une requête JPQL.JPQL/SQL: Comment sélectionner * à partir d'une table avec un groupe sur une seule colonne?

Table originale:

ID | Name | City 
--------------------------- 
1  | John | NY 
2  | Maria | LA 
3  | John | LA 
4  | Albert | NY 

résultat Wanted, si je la distingue de la Ville:

ID | Name | City 
--------------------------- 
1  | John | NY 
2  | Maria | LA 

Quelle est la meilleure façon de le faire? Merci de votre aide.

+0

John et Albert sont à New York. Ne vous souciez-vous pas de ce qui est retourné pour la seule ligne NY dans les résultats? Il y a une question similaire à propos de LA. –

+0

En fait, je voudrais avoir ceux avec les ID les plus bas – DavidD

Répondre

4

En JPQL, vous pourriez faire quelque chose comme ceci:

select e 
from MyEntity e 
where e.id in (select min(e.id) from MyEntity e group by e.city) 

Ce retour:

MyEntity [id=1, name=John, city=NY] 
MyEntity [id=2, name=Maria, city=LA] 
+0

Excellent. J'ai juste dû remplacer le "select e" par "select *" pour le faire fonctionner. Merci beaucoup! – DavidD

0

J'sais à propos JPQL, mais le SQL serait:

SELECT x.* 
    FROM TABLE x 
    JOIN (SELECT MIN(t.id) AS min_id, 
       t.city 
      FROM TABLE t 
     GROUP BY t.city) y ON y.min_id = x.id 
         AND y.city = x.city 
Questions connexes