INDICE

Résolu
cs_louise06 Messages postés 3 Date d'inscription vendredi 15 mai 2009 Statut Membre Dernière intervention 21 mai 2009 - 15 mai 2009 à 10:28
cs_louise06 Messages postés 3 Date d'inscription vendredi 15 mai 2009 Statut Membre Dernière intervention 21 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)

Mais ça ne me renvoie aucun résultat

Merci de votre aide

6 réponses

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
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)
3
gperuch Messages postés 40 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 2 février 2012 1
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)

greg
3
crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011
18 mai 2009 à 15:14
Tu peux donner les champs de tes tables stp?
0
gperuch Messages postés 40 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 2 février 2012 1
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
0

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

Posez votre question
cs_louise06 Messages postés 3 Date d'inscription vendredi 15 mai 2009 Statut Membre Dernière intervention 21 mai 2009
21 mai 2009 à 17:02
0
cs_louise06 Messages postés 3 Date d'inscription vendredi 15 mai 2009 Statut Membre Dernière intervention 21 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'
0
Rejoignez-nous