[SQL] Requete (max, group by,...)

Requete (max, group by,...) [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 10-05-2005 à 15:41:12    

Salut,
 
Je travaille sous MySQL 4.1.9 sous Windows.
 
Pour cette requete, on a besoin de 2 tables :  
 
PARENT_FAM
id(pk)
role (pk)
 
IDENTITE
id  
chgid (format date)
nom
pnom
 
Le but de la requete est de recuperer pour chaque personne le id(en fonction du role associé ),nom,pnoms le plus recent en fonction du champs chgid.
 
Dans la table PARENT_FAM , il faudrait selectionner uniquement les id dont le role n'est pas : "enfant".
 
Dans la table IDENTITE, certains champs d'une identite peuvent changer au cours du temps.
A chaque changement, on copie l'identite de la personne en changent le champs chgid
 
Ex:
id     2
chgid  01/01/1980
nom    toto
pnom   paul
 
id     2
chgid  01/01/2000
nom    toto
pnom   pierre
 
Donc en gros,pour chaque ID récuperée dans la table PARENT_FAM n'étant pas un enfant, il faut selectionner dans IDENTITE celui qui a le champ CHGID le plus recent.
 
 
J'avais commencé a faire ça, mais c'est totalement foireux....
 

SELECT parent_fam.id,MAX(chgid),nom,pnom
FROM identite, parent_fam
WHERE parent_fam.id= identite.id
GROUP BY parent_fam.id


 
Je faisais pas le test sur le role , et en plus, ca me renvoyé pour chq ID le bon chgid, mais pas le bon nom,pnom.
 
 
 
Si vous pourriez m'aidez pls, ca serait cool, merci ! :jap:  
 
 

Reply

Marsh Posté le 10-05-2005 à 15:41:12   

Reply

Marsh Posté le 10-05-2005 à 16:03:27    

G eu presque le meme pb y'a quelques temps, si tu enlèves le max et que tu fais un ORDER BY chgid DESC ça peut peut-être marcher ? si tu veux quelque chose d'optimisé c pas à moi qu'il faut demander par contre :)
 
EDIT: je viens de relire j'avais pas bien capté le but de la requête oublie-moi..


Message édité par crazywolf le 10-05-2005 à 16:10:12
Reply

Marsh Posté le 10-05-2005 à 19:49:02    

Code :
  1. SELECT parent_fam.id, nom, prenom, chgid
  2. FROM identite as ident1, parent_fam
  3. WHERE parent_fam.id = ident1.id
  4. AND chgid = ( SELECT MAX(chgid)
  5.               FROM identite as ident2
  6.               WHERE ident1.id = ident2.id)
  7. AND role <> 'enfant';


 
essaye un peu cela, en tt cas c'est vers ce genre de chose que tu dois t'orienté, c'est pas évident de pondre une requete sql sans pour autant connaitre bien la bd et le faire sur papier c'est pas mon fort ;)  
j'espere t'avoir quand mm aidé un peu


Message édité par moi23372 le 10-05-2005 à 19:52:58
Reply

Marsh Posté le 11-05-2005 à 11:25:07    

moi23372 a écrit :

Code :
  1. SELECT parent_fam.id, nom, prenom, chgid
  2. FROM identite as ident1, parent_fam
  3. WHERE parent_fam.id = ident1.id
  4. AND chgid = ( SELECT MAX(chgid)
  5.               FROM identite as ident2
  6.               WHERE ident1.id = ident2.id)
  7. AND role <> 'enfant';


 
essaye un peu cela, en tt cas c'est vers ce genre de chose que tu dois t'orienté, c'est pas évident de pondre une requete sql sans pour autant connaitre bien la bd et le faire sur papier c'est pas mon fort ;)  
j'espere t'avoir quand mm aidé un peu


 
 
Nikel ! Ca marche, tu m enleves un belle epine la, jte remercie :jap:  :sol:  
++

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed