Max(date) avec jointure

cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012 - 16 févr. 2012 à 13:19
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 - 17 févr. 2012 à 11:01
Bonjour,

J'essaye en vain de trouver une requete qui pourrait me prendre les dates maximum de matricules :

table PERSONNE :

MATRI_PERSONNE
000002525
000001326
...

table CIS_PERSONNE_AFF :

MATRI_CIS_PERS|DATE_ENTRE
000002525|12/12/2011
000002525|03/08/2005
000001326|05/10/2010
...


Il faudrait que j'arrive au résultat :

matricule|DATE_ENTRE
000002525|12/12/2011
000001326|05/10/2010

Je ne vois pas trop comment faire :/

SELECT * FROM CIS_PERSONNE_AFF C INNER JOIN PERSONNE on C.MATRI_CIS_PERS=PERSONNE.MATRI_PERSONNE
WHERE (CODE_STATUT='VOL') AND DTE_ENTRE
in (SELECT MAX(DTE_ENTRE) FROM CIS_PERSONNE_AFF WHERE C.MATRI_CIS_PERS=CIS_PERSONNE_AFF.MATRI_CIS_PERS)

la requete ci-dessus ne fonctionne pas.
A voir également:

13 réponses

cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
16 févr. 2012 à 13:46
je viens de trouver :

Select distinct det.DTE_ENTRE, Cust.MATRI_PERSONNE, Cust.NOM_PERS, Cust.PRENOM_PERS From CIS_PERSONNE_AFF det Join (Select MATRI_CIS_PERS, Max(DTE_ENTRE) LastestDate from CIS_PERSONNE_AFF Group By MATRI_CIS_PERS) as Latest On Latest.MATRI_CIS_PERSDet.MATRI_CIS_PERS and Latest.LastestDate Det.DTE_ENTRE Join PERSONNE Cust On Cust.MATRI_PERSONNE = det.MATRI_CIS_PERS WHERE CODE_STATUT='VOL'
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
16 févr. 2012 à 14:05
Par contre je ne vois pas non plus comment je peux rajouter un DTE_ENTRE2 afin de prendre les dates inférieurs à DTE_ENTRE.
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
16 févr. 2012 à 14:26
Pourquoi ceci ne marche pas :

Select distinct C.DTE_ENTRE, P.MATRI_PERSONNE, P.NOM_PERS, P.PRENOM_PERS From CIS_PERSONNE_AFF C Join (Select MATRI_CIS_PERS, DTE_ENTRE AS LastestDate from CIS_PERSONNE_AFF Group By MATRI_CIS_PERS) as Latest On Latest.MATRI_CIS_PERSC.MATRI_CIS_PERS and Latest.LastestDate C.DTE_ENTRE Join PERSONNE P On P.MATRI_PERSONNE = C.MATRI_CIS_PERS WHERE (C.DTE_ENTRE not in (SELECT MAX(C.DTE_ENTRE) FROM CIS_PERSONNE_AFF)) AND CODE_STATUT='VOL'
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
16 févr. 2012 à 15:03
Salut,

j'ai pas suivi tes pb depuis le début, mais quel est ton souci exact là ? La requête est rejeté par ton client ou elle ne produit pas le résultat que tu espérais ?
0

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

Posez votre question
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
16 févr. 2012 à 15:19
Avec la requete de 14:26:46 je voudrais avoir les les matricules des '2ème' MAX(DTE_ENTREE). Si il n'y a pas de 2ème dates alors il doit quand même afficher les matricules (qui auront un blanc comme DTE_ENTREE).

J'ai comme erreur : erreur interne de la dll.
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
16 févr. 2012 à 15:43
Avec cette autre requete :

Select distinct C.DTE_ENTRE, P.MATRI_PERSONNE, P.NOM_PERS, P.PRENOM_PERS 
From CIS_PERSONNE_AFF C Join (Select MATRI_CIS_PERS, MAX(DTE_ENTRE) AS LastestDate from CIS_PERSONNE_AFF WHERE (DTE_ENTRE < (SELECT MAX(DTE_ENTRE) FROM CIS_PERSONNE_AFF)) Group By MATRI_CIS_PERS) as Latest On Latest.MATRI_CIS_PERSC.MATRI_CIS_PERS and Latest.LastestDate C.DTE_ENTRE Join PERSONNE P On P.MATRI_PERSONNE = C.MATRI_CIS_PERS 
WHERE CODE_STATUT='VOL'


J'ai comme erreur : il n'existe pas de rubrique <Expr1> dans le fichier <latest>
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
16 févr. 2012 à 16:01
Déjà mieux comme erreur que "erreur interne" ^^

Bon, l'erreur vient, je pense, de ton alias Latest qui devrait correspondre à un alias de table mais que tu utilises avec un AS, comme pour un alias de champ. Teste et tiens moi au jus.

PS : tu peux mettre une balise [ code=sql ] pour que ce soit plus joli, même si l'interface te la propose pas. Ex. :
SELECT * FROM maTable WHERE truc IS NULL;
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
16 févr. 2012 à 16:34
Re,

Malheureusement j'ai la même erreur :/

En tout cas merci de cette explication sur les alias.
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
16 févr. 2012 à 16:44
pour y voir plus clair :

Select distinct C.DTE_ENTRE, P.MATRI_PERSONNE, P.NOM_PERS, P.PRENOM_PERS 
From CIS_PERSONNE_AFF C Join (Select MATRI_CIS_PERS, MAX(DTE_ENTRE) AS LastestDate from CIS_PERSONNE_AFF WHERE (DTE_ENTRE < (SELECT MAX(DTE_ENTRE) FROM CIS_PERSONNE_AFF)) Group By MATRI_CIS_PERS) as Latest On Latest.MATRI_CIS_PERSC.MATRI_CIS_PERS and Latest.LastestDate C.DTE_ENTRE Join PERSONNE P On P.MATRI_PERSONNE = C.MATRI_CIS_PERS 
WHERE CODE_STATUT='VOL'
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
16 févr. 2012 à 16:45
oups :

Select distinct C.DTE_ENTRE, P.MATRI_PERSONNE, P.NOM_PERS, P.PRENOM_PERS 
From CIS_PERSONNE_AFF C Join (Select MATRI_CIS_PERS, MAX(DTE_ENTRE) AS LastestDate from CIS_PERSONNE_AFF WHERE (DTE_ENTRE < (SELECT MAX(DTE_ENTRE) FROM CIS_PERSONNE_AFF)) Group By MATRI_CIS_PERS) Latest On Latest.MATRI_CIS_PERSC.MATRI_CIS_PERS and Latest.LastestDate C.DTE_ENTRE Join PERSONNE P On P.MATRI_PERSONNE = C.MATRI_CIS_PERS 
WHERE CODE_STATUT='VOL'


... sans le 'as'
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
16 févr. 2012 à 17:05
Là j'arrive pas à voir facilement d'où l'erreur pourrait venir.
Pourrais-tu me faire suivre le dump de ta DB que je teste ça ?
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
17 févr. 2012 à 10:38
Comment je peux faire un dump depuis ODBC ? :/ sous access, mysql ok mais à partir d'une connexion odbc ???
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
17 févr. 2012 à 11:01
Je connais pas particulièrement les objets du connecteur ODBC et m'est avis qu'il doit falloir un parcours assez lourd des instances pour faire ressortir un dump SQL.
Quel SGBD utilises-tu ? Tu n'as pas moyen de l'attaquer en direct via un client ?
0
Rejoignez-nous