cs_louise06
Messages postés3Date d'inscriptionvendredi 15 mai 2009StatutMembreDernière intervention21 mai 2009
-
15 mai 2009 à 10:28
cs_louise06
Messages postés3Date d'inscriptionvendredi 15 mai 2009StatutMembreDernière intervention21 mai 2009
-
21 mai 2009 à 18:11
Bonjour,
Je suis une piètre débutante qui tente de créer des requêtes SQL dans son outil de travail.
Je veux récupérer les lignes d'une base qui répondent à plusieurs critères jusque là pas de souci. Mais cela se complique parce que pour un même individu j'ai plusieurs lignes qui ont un indice différent.
Ce que je souhaite c'est récupérer pour chaque individu la ligne qui correspond à mes critères mais qui a l'indice le plus élevé.
Ma requête est :
SELECT pers_nom, pers_pre,rhpv_c1,rhpv_ind,rhpv_d1 FROM pers ,rh_persprev WHERE pers.pers_matrh_persprev.pers_mat AND rhpv_cod5 AND rhpv_d1= '14/05/2009'
le résultat est :
pers_nom<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>,
pers_pre,
rhpv_c1,
rhpv_ind,
rhpv_d1,
----
TEST ,
TEST ,
promotion CHEF ,
1,
20090514 00:00:00.000,
----
TEST ,
TEST ,
CDI ,
2,
20090514 00:00:00.000,
----
test1,
test1 ,
CDD ,
3,
20090514 00:00:00.000
MAIS JE NE VEUX RECUPERER QUE LA LIGNE 2 POUR TEST et la 3 pour Test1
J'ai essayé avec
SELECT pers_nom, pers_pre,rhpv_c1,rhpv_ind,rhpv_d1 FROM pers ,rh_persprev WHERE pers.pers_mat =rh_persprev.pers_mat AND rhpv_cod= 5 AND rhpv_d1 = '14/05/2009' ANDSELECT</gras> max(rh_persprev.rhpv_ind) FROM rh_persprev)
aieeeuuuuu
Messages postés698Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention20 mai 20113 18 mai 2009 à 16:43
Bonjour.
il y a plus simple :
SELECT pers_nom, pers_pre, MAX(rhpv_c1)
FROM MaTable
GROUP BY
pers_nom, pers_pre
à adapter, car je ne sais pas a quoi correspondent les deux derniers champs dans votre requete (si les autre champs varient également, seule la solution dans le style de gperuch pourra fonctionner)
gperuch
Messages postés40Date d'inscriptiondimanche 18 janvier 2009StatutMembreDernière intervention 2 février 20121 18 mai 2009 à 16:50
Bonjour,
J'ai corrigé l'erreur de ta requete pour que tu comprennes ou était le pb, par contre la réponse de aieeeeuuuuu est la meilleur methode . (bien plus propre , plus efficace et plus compréansible)
gperuch
Messages postés40Date d'inscriptiondimanche 18 janvier 2009StatutMembreDernière intervention 2 février 20121 18 mai 2009 à 16:13
salut ,
il te manque un critere dans ton select max:
SELECT pers_nom, pers_pre,rhpv_c1,rhpv_ind,rhpv_d1
FROM pers T1,
rh_persprev T2
WHERE T1.pers_mat= T2.pers_mat
AND rhpv_cod =5
AND rhpv_d1= '14/05/2009'
AND max(T3.rhpv_ind) FROM rh_persprev T3 where T3.rhpv_ind)
j'ai pas testé, mais ca doit marcher
greg
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_louise06
Messages postés3Date d'inscriptionvendredi 15 mai 2009StatutMembreDernière intervention21 mai 2009 21 mai 2009 à 18:11
La syntaxe max() nous renvoi une colonne en vue, la colonne indice n'était pas forcément la mieux.
Du coup je teste les dates, et je demande la date max pour chaque individu
J'ai revu ma requete ensuite de cette manière :
SELECT nivprev.pers_mat, pers_nom, pers_pre,niv_lib2,niv_lib3,date = max(rhpv_d2) FROM pers ,rh_persprev,nivprev,niveau2,niveau3 WHERE pers.pers_mat=rh_persprev.pers_mat AND rhpv_cod=3 AND pers.pers_mat=nivprev.pers_mat AND niveau2.niv_cod1=nivprev.niv_cod1 AND niveau2.niv_cod2=nivprev.niv_cod2 AND niveau3.niv_cod1=nivprev.niv_cod1 AND niveau3.niv_cod2=nivprev.niv_cod2 AND niveau3.niv_cod3=nivprev.niv_cod3 AND nivprev.niv_dat<='21/05/2009' AND nivprev.niv_datf>'21/05/2009' GROUP BY nivprev.pers_mat, pers_nom, pers_pre,niv_lib2,niv_lib3
J'obtiens bien une ligne par personne avec sa date la plus ancienne dans une colonne "vue" nommée date
Mais je ne sais pas comment compléter cette requête pour aller chercher dans cette selection = les dates dans 'date' correspondant à mes critères : date >= '21/05/2009' AND date <= '28/05/2009'