Distinct ou ?
Résolu
dan91
-
nathan974 Messages postés 38 Date d'inscription Statut Membre Dernière intervention -
nathan974 Messages postés 38 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai une table SQL qui contient : annee,no_lot,nom et j'ai mis un index sur (annee,no_lot).
Dans cette table je peux avoir pour un même no_lot des années différentes. Je voudrais récupérer pour chaque lot, la ligne du lot ayant la l'année la plus élevée et les données associées (nom..). J'ai essayé SELECT DISTINCT(no_lot) avec ORDER BY sur annnee. SQL me sort bien le nombre de ligne que j'attendais mais lorsque j'ajoute les autres données (SELECT DISTINCT(no_lot),annee,nom ... SQL m'affiche tout...
Pouvez m'aider.
Merci
J'ai une table SQL qui contient : annee,no_lot,nom et j'ai mis un index sur (annee,no_lot).
Dans cette table je peux avoir pour un même no_lot des années différentes. Je voudrais récupérer pour chaque lot, la ligne du lot ayant la l'année la plus élevée et les données associées (nom..). J'ai essayé SELECT DISTINCT(no_lot) avec ORDER BY sur annnee. SQL me sort bien le nombre de ligne que j'attendais mais lorsque j'ajoute les autres données (SELECT DISTINCT(no_lot),annee,nom ... SQL m'affiche tout...
Pouvez m'aider.
Merci
A voir également:
- Gpu distinct inactif
- Service spouleur d'impression inactif - Guide
- Gpu z - Télécharger - Informations & Diagnostic
- Processus inactif du systeme - Forum Matériel & Système
- 2 colis distinct shein - Forum Consommation & Internet
- Accélération gpu - Guide
3 réponses
Bonjour,
C'est normal que ta requête ne fonctionne pas, elle doit être un peu plus complexe que ça.
Essai :
SELECT t1. *
FROM nom_table t1
INNER JOIN (
SELECT no_lot, MAX( annee ) AS MaxAnnee
FROM nom_table
GROUP BY no_lot
)
groupedtt
ON t1.no_lot = groupedtt.no_lot
AND t.annee = groupedtt.MaxAnnee
En gros tu doit coupler ta table entière avec uniquement les lignes avec l'année max regrouper par no_lot. N'oublie pas de remplacer nom_table par le nom de ta table ;-)
C'est normal que ta requête ne fonctionne pas, elle doit être un peu plus complexe que ça.
Essai :
SELECT t1. *
FROM nom_table t1
INNER JOIN (
SELECT no_lot, MAX( annee ) AS MaxAnnee
FROM nom_table
GROUP BY no_lot
)
groupedtt
ON t1.no_lot = groupedtt.no_lot
AND t.annee = groupedtt.MaxAnnee
En gros tu doit coupler ta table entière avec uniquement les lignes avec l'année max regrouper par no_lot. N'oublie pas de remplacer nom_table par le nom de ta table ;-)
Bonjour Nathan,
Merci de ta réponse. Effectivement tu as raison. Voila ce que j'ai passé et cela m'a résolu le pb :
SELECT no_lot, annee, nom FROM 'clm_t_coprop' u WHERE
annee = (select max(annee) from 'clm_t_coprop' where no_lot = u.no_lot)
order by no_lot asc ;
A bientôt et merci encore de ton support.
Merci de ta réponse. Effectivement tu as raison. Voila ce que j'ai passé et cela m'a résolu le pb :
SELECT no_lot, annee, nom FROM 'clm_t_coprop' u WHERE
annee = (select max(annee) from 'clm_t_coprop' where no_lot = u.no_lot)
order by no_lot asc ;
A bientôt et merci encore de ton support.