SQL : Sortir une ligne par identifiants

Résolu/Fermé
Nicoyac - 17 avril 2009 à 10:40
Sacha79 Messages postés 29 Date d'inscription samedi 27 juin 2009 Statut Membre Dernière intervention 5 février 2010 - 7 juil. 2009 à 10:45
Bonjour,

Je travail actuellement sur SQL Server et je cherche à obtenir ce résultat :

TABLE DEPART TABLE ARRIVEE
id id2 modele id id2 modele
1 a toto 1 a toto
2 b titi 2 b titi
3 c papa 3 e tata
1 d dodo
3 e tata

En bref je souhaite sortir une ligne par "id" avec un tri décroissant sur modele mais je veux absolument avoir les autres champs dans le résultat.

Aujourd'hui j'arrive,

soit à sortir une table avec l'id uniquement mais pas les autres champs en faisant :

SELECT id
FROM TABLE DEPART
GROUP BY id

soit à sortie une table avec l'id et le modele mais celle-ci comporte encore les doublons sur id

SELECT DISTINCT id, modele
FROM TABLE DEPART
ORDER BY id, modele DESC

Auriez-vous une idée ? Merci d'avance et bonne journée,
A voir également:

7 réponses

Coucou !!
J'ai pas vraiment tout compris mais si je te cite :

Aujourd'hui j'arrive, soit à sortir une table avec l'id uniquement mais pas les autres champs en faisant :

SELECT id
FROM TABLE DEPART
GROUP BY id

Si tu veux les autres champs, t'as juste à écrire :

SELECT *
FROM TABLE DEPART
GROUP BY id

Non ??

Bon courage !!
0
Etranger, merci pour ta réponse mais malheureusement les variables présentes dans la fonction d'agrégat (GROUP BY) doivent être présentes dans le select et donc cette requête ne fonctionne pas.

Bonne journée,
0
Je me rend compte que la demande n'est pas très clair donc voici la table de départ et la table voulue en résultat :

TABLE DEPART
id--id2--modele
1--a--toto
2--b--titi
3--c--papa
1--d--dodo
3--e--tata

TABLE RESULTAT
1--a--toto
2--b--titi
3--e--tata
0
hé bah alors :

SELECT id, *
FROM TABLE DEPART
GROUP BY id

toujours pas ca ??
0
lefadrine Messages postés 28 Date d'inscription vendredi 17 avril 2009 Statut Membre Dernière intervention 20 avril 2010 11
17 avril 2009 à 11:11
salut,
je reprends un peu : tu as 2 tables, DEPART ET ARRIVEE.
mais que veux-tu obtenir réellement, je n'ai pas bien compris ce que tu cherche à sortir...
et qu'est ce que ton id2 ?
arrivee.id1 = clé étrangère sur depart ?
arrivee.id2 = clé étrangère sur depart?

Explique et détaille nous plus précisément tes tables, tes champs, et donne peut-être un exemple de ce que tu souhaites obtenir comme résultats pour ta requête ;-)

erratum : ah je crois que tu as été plus rapide que moi...
0
Je pense qu'il a une table DEPART et justement la table ARRIVEE c'est ce qu'il veut..
0
Alors,

ETRANGER, ta deuxième proposition ne fonctionnera pas non plus et justement là est tout le problème :
Si je fais "SELECT id FROM TABLE DEPART GROUP BY id", j'obtiens le bon dédoublonnage mais pas les bonnes infos. Et si je fais SELECT * FROM TABLE DEPART GROUP BY id, id2, modele", j'obtiens les bonnes infos mais pas le bon dédoublonnage (qui se fera sur les trois champs) !

Concernant la question de LEFADRINE la table d'entrée a une double clé : id et id2 mais je cherche à dédoublonner uniquement sur id en prenant la première valeur de "modele" après tri, en l'occurence la syntaxe SQL de ce que je veux pourrais ressembler à cela mais cette syntaxe est fausse :

SELECT *
FROM TABLE DEPART
GROUP BY id
ORDER BY modele DESC
0
Nicoyac > Nicoyac
17 avril 2009 à 11:34
Et au fait, merci à vous deux !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lefadrine Messages postés 28 Date d'inscription vendredi 17 avril 2009 Statut Membre Dernière intervention 20 avril 2010 11
17 avril 2009 à 11:38
ah je vois ce que tu veux :
tu veux obtenir pour un id donné la ligne qui a le modele le plus grand ?

exemple :

DEPART
1 a abc
1 b zzz

RESULTAT
1 a abc
0
Oui c'est ça sauf que dans ton exemple, le résultat souhaité est :

RESULTAT
1 b zzz (car 'zzz' est la valeur du modele la plus "grande" et b la valeur de 'id2' dont on ne tient pas compte)
0
lefadrine Messages postés 28 Date d'inscription vendredi 17 avril 2009 Statut Membre Dernière intervention 20 avril 2010 11
17 avril 2009 à 11:46
dans ce cas, tu as besoin d'une sous requete :

SELECT * FROM arrivee
WHERE modele IN (SELECT MAX(modele) FROM arrivee GROUP BY id);

voilà ;)
0
Lefadrine,

La requête que tu m'as indiqué ne me convient pas vraiment puisque les modèles se répétent souvent dans la table (non visible dans mon exemple). Pour mieux l'exprimer, les id correpondent à des personnes et le modèle à un véhicule. Si pour la personne 1 je sélectionne la veleur max soit par exemple 2CV alors avec cette requête je sortirai par la suite toutes les 2CV de la table.

Par contre ta réponse m'a donné la solution en effet la requéte qui fonctionnera sera :
SELECT MAX(Modèle), id
FROM TABLE ENTREE
GROUP BY id

Merci à vous deux pour votre aide, à charge de revanche,

Nicoyac
0
Sacha79 Messages postés 29 Date d'inscription samedi 27 juin 2009 Statut Membre Dernière intervention 5 février 2010 8
7 juil. 2009 à 10:45
Est-ce que cette requête ne répondrait pas à ta question : Reccupérer le détail de la valeur MAX d'une table enfant : SUJET : Table Parent COMMENTAIRE : Table Enfant

http://ww11.xoowiki.com/Article/SQL-Server/detail-dune-valeur-max-enfant-143.aspx
0