Max(date) avec jointure

Signaler
Messages postés
60
Date d'inscription
dimanche 7 novembre 2010
Statut
Membre
Dernière intervention
4 août 2012
-
cs_jopop
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
-
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.

13 réponses

Messages postés
60
Date d'inscription
dimanche 7 novembre 2010
Statut
Membre
Dernière intervention
4 août 2012

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'
Messages postés
60
Date d'inscription
dimanche 7 novembre 2010
Statut
Membre
Dernière intervention
4 août 2012

Par contre je ne vois pas non plus comment je peux rajouter un DTE_ENTRE2 afin de prendre les dates inférieurs à DTE_ENTRE.
Messages postés
60
Date d'inscription
dimanche 7 novembre 2010
Statut
Membre
Dernière intervention
4 août 2012

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'
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
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 ?
Messages postés
60
Date d'inscription
dimanche 7 novembre 2010
Statut
Membre
Dernière intervention
4 août 2012

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.
Messages postés
60
Date d'inscription
dimanche 7 novembre 2010
Statut
Membre
Dernière intervention
4 août 2012

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>
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
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;
Messages postés
60
Date d'inscription
dimanche 7 novembre 2010
Statut
Membre
Dernière intervention
4 août 2012

Re,

Malheureusement j'ai la même erreur :/

En tout cas merci de cette explication sur les alias.
Messages postés
60
Date d'inscription
dimanche 7 novembre 2010
Statut
Membre
Dernière intervention
4 août 2012

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'
Messages postés
60
Date d'inscription
dimanche 7 novembre 2010
Statut
Membre
Dernière intervention
4 août 2012

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'
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
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 ?
Messages postés
60
Date d'inscription
dimanche 7 novembre 2010
Statut
Membre
Dernière intervention
4 août 2012

Comment je peux faire un dump depuis ODBC ? :/ sous access, mysql ok mais à partir d'une connexion odbc ???
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
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 ?