|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Consultant junior BI Inscription : mai 2011 Messages : 28 ![]() |
Bonjour tout le monde !
Je rencontre un petit problème pour filtrer des données. Je possède une table avec pour format : ID - Nom - Age - DateMAJ Une personne peut donc apparaître plusieurs fois, les lignes n'étant pas supprimées avant une nouvelle insertion. Je souhaiterais récupérer uniquement les lignes (complètes) de chaque agent avec la date de dernière mise à jour. Le problème est que je souhaite également récupérer le Nom et l'Age. Mais comme l'âge change d'une fois sur l'autre, je ne peux pas regrouper les lignes ensemble lors de la première requête. (Je ne peux pas remplacer l'âge par la date de naissance, même si ça simplifierai le problème). J'ai pensé faire qqc du style : Code :
Avez-vous une petite idée ? |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Saluton,
Pourquoi ne pas faire avec Age ce que tu fais avec DateMAJ , MAX(Age) ?
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
00
|
|
|
#3 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 852 ![]() |
salut,
ta requête ne fera jamais ça... étant donné l'unicité évidente de id, c'est comme si tu écrivais: il faudrait simplement: Code sql :
SELECT nom,max(age) FROM MaTable GROUP BY nom entre nous laisser des doublons pour ce genre d'utilisation n'est vraiment pas une bonne chose: pourquoi faire que des insert plutot qu'un update ou un replace...?
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#4 | ||
|
Candidat au titre de Membre du Club
![]() Consultant junior BI Inscription : mai 2011 Messages : 28 ![]() |
Bonjour, et merci pour vos premières réponses.
Mais en fait, mon problème est un peu plus compliqué que l'exemple que j'utilise. Je l'ai juste associé à cet exemple car je pense que ça colle à ce que je recherche. L'ID n'est pas unique, tout comme le nom. J'ai peut-être mal choisit le nom de colonne, il s'agirait d'une référence vers la personne (un matricule ?). Ainsi, je peux avoir dans ma table : 01 - Dupond - 27 - 22/05/2008 02 - Martin - 33 - 22/05/2008 03 - Dupond - 26 - 22/05/2008 01 - Dupond - 29 - 27/08/2010 02 - Martin - 34 - 10/06/2009 L'âge n'était qu'un exemple, le dernier n'est pas forcément le max. Par exemple, j'aurais pu mettre "DerniereNoteObtenu". La base est déjà alimentée (je repars d'un projet existant), je ne peux donc pas faire de update dans la table source. Par contre, je le ferai dans ma table cible (mais je dois quand même faire ce tri avant C'est pour ça que : Code :
01 - 27/08/2010 02 - 10/06/2009 03 - 22/05/2008 Mais après, je ne vois pas comment récupérer les lignes complètes (ici, il s'agirait donc de récupérer, en plus, le nom et l'âge de 01 pour la ligne du 27/08/2010, le nom et l'âge de 02 pour la ligne du 10/06/2009, etc ...). |
||
|
|
00
|
|
|
#5 | ||
|
Invité régulier
![]() Inscription : septembre 2009 Messages : 12 ![]() |
Hello,
Je me plante peu être car j'ai un peu de mal à voir ce qui ne va pas mais il me semble qu'il te suffit de faire : Code :
|
||
|
|
00
|
|
|
#6 | |
|
Candidat au titre de Membre du Club
![]() Consultant junior BI Inscription : mai 2011 Messages : 28 ![]() |
Quand il y a plusieurs colonnes, je suis obligé de faire le GROUP BY sur l'ensemble des colonnes (sauf celle où j'indique "MAX").
Citation:
|
|
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 852 ![]() |
d'où l'intérêt de travailler directement sur la vraie structure plutôt que des substitutifs...
qu'on voit directement le mieux à faire
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#8 |
|
Candidat au titre de Membre du Club
![]() Consultant junior BI Inscription : mai 2011 Messages : 28 ![]() |
Je me suis dit que ça serait plus simple, vu qu'il faut avoir la vision métier précise, que la table en question possède une 60aine de champs, avec des noms pas toujours très parlant et que je dois faire les GROUP BY sur plusieurs colonnes en même temps.
Je pense avoir simplifié le problème, de manière à pouvoir généraliser la solution à mon cas assez facilement après. J'ai essayé de faire une jointure externe avec elle même mais je galère un peu Mais bon, pas d'autre idée pour l'instant |
|
|
00
|
|
|
#9 | ||
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Ce genre de requete devrait vous aider a vous approcher de votre solution
Code :
Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
||
|
|
10
|
|
|
#10 |
|
Candidat au titre de Membre du Club
![]() Consultant junior BI Inscription : mai 2011 Messages : 28 ![]() |
C'est exactement ça, merci beaucoup !
![]() En plus j'étais presque passé par là ... mais quand je regarde ma requête, j'avais un : d'où la requête qui ne marchait pas ... Erreur de frappe ... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com