Dernière action d'un ID dans la même table

CAP
Petit nouveau ! | 4 Messages

20 oct. 2006, 12:43

Bonjour le forum,

Je vous expose mon problème (je n'ai pas fait de SQL depuis quelques années), je ne sais pas si c'est faisable et si ça l'est, comment l'écrire.

J'ai une Table1 avec les champs suivants :
Clé
Actions
Date / Heure
Identifiant

et une Table2 avec les champs suivants :
Clé
Nom


A chaque ligne de ma Table1 où j'ai "telle action" dans le champ Actions, j'aimerais retrouver la dernière action différente de "telle action" du même Identifiant ("dernière" au sens temporel -> champ Date / Heure), lier cette ligne par la clé à ma Table2 et récupérer le Nom.

J'espère que c'est assez clair, je vous remercie par avance de votre aide,

Bonne journée,

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

20 oct. 2006, 14:51

Salut,
Me semble que ce post ressemble à ta demande... Une solution y a été trouvé tu peux certainement adapter.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

CAP
Petit nouveau ! | 4 Messages

20 oct. 2006, 15:25

Merci Truc mais nous ne sommes pas dans le même cas ; dans le post, le Id est incrémenté, pour moi l'identifiant correspond à un matricule en fait, il s'agit donc de retrouver la dernière action de ce matricule.

Eléphant du PHP | 396 Messages

20 oct. 2006, 15:41

Si j'ai bien compris

1/ tu boucles sur les identifiants
2/ tu fais une requête MAX(date) sur l'identifiant avec une jointure sur la clé pour recupérer le nom

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

20 oct. 2006, 16:43

Au lieu de l'id tu as la date, donc un MAX(date)
La même requête adaptée...
SELECT t2.nom
FROM Table1 t1, Table2 t2
WHERE  t1.cle = t2.cle
AND t1.cle= (SELECT MAX(t1.champ_date) FROM Table1 t1 WHERE t1.cle=t.cle)
GROUP BY t1.cle
sinon il y a moyen de décomposer en 2 requêtes.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

CAP
Petit nouveau ! | 4 Messages

20 oct. 2006, 17:42

Merci pour votre aide !
Dans ton code, c'est bien
WHERE t1.cle=t1.cle qu'il faut lire et non WHERE t1.cle=t.cle ?

Mais lorsqu'on fait le MAX(t1.champ_date), j'ai besoin qu'il aille chercher la ligne avec le même identifiant et dont la date est la plus proche de ma ligne active.
Je suis sur une ligne
ID CHAMP_DATE CLE STATUT
100 10/10/2006 11:45 1231 1

Je veux qu'il aille chercher la dernière action (statut <> 1 par exemple) de cet identifiant 100 et qu'il me donne le nom grâce au lien sur la CLE avec la table 2.
Mais, cet identifiant 100 peut avoir dans la journée, plus tard, à nouveau ce cas où le statut est 1.


Suis-je assez clair ? Merci

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

20 oct. 2006, 17:53

Dans ton code, c'est bien
WHERE t1.cle=t1.cle qu'il faut lire et non WHERE t1.cle=t.cle ?
Non "t2.cle" ... au temps pour moi :?

avec le statut :
SELECT t2.nom
FROM Table1 t1, Table2 t2
WHERE  t1.cle = t2.cle
AND t1.statut <> 1  
AND t1.cle= (SELECT MAX(t1.champ_date) FROM Table1 t1 WHERE t1.cle=t2.cle)
GROUP BY t1.cle 

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 396 Messages

20 oct. 2006, 17:55

A voir sa version de MySQL pour être sûr qu'il puisse faire une requête imbriquée.

CAP
Petit nouveau ! | 4 Messages

30 oct. 2006, 11:33

Bonjour tout le monde,

J'étais absent la semaine dernière ...
Merci pour cette aide, je vais essayer ; je vous tiens au courant.

Bonne journée,