[SQL] Requete MAX

Requete MAX [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 01-12-2008 à 22:34:24    

Bonsoir
 
J'ai besoin de vote aide sur une requête un peu complexe sous MySQL:
 
J'ai deux tables :
 
histo :
| ID_OBJ | VALUE | DATE |
| 1 | 10 | 2008-21-01 21:00:00 |
| 1 | 20 | 2008-21-01 22:00:00 |
| 1 | 15 | 2008-21-01 23:00:00 |
| 2 | 10 | 2008-21-01 19:00:00 |
| 2 | 20 | 2008-21-01 20:00:00 |
 
t_obj
| ID_OBJ | LIBELLE |
| 1 | MonObj1 |
| 2 | MonObj2 |
 
 
Je souhaite avoir la valeur value la plus récente stockée dans la table histo pour chaque objet.
 
J'ai essayé ça mais sans succès :
 

Code :
  1. SELECT t_obj.ID_OBJ, t_obj.LIBELLE, histo.VALUE
  2. FROM t_obj, histo
  3. WHERE t_obj.ID_OBJ = histo.ID_OBJ
  4. GROUP BY t_obj.ID_OBJ HAVING MAX(histo.DATE)


 
Le résultat attendu devrait être :
 
| ID_OBJ | LIBELLE | VALUE
| 1 | MonObj1 | 15
| 2 | MonObj2 | 20
 
Le résultat me paraît simple à obtenir mais je n'y arrive pas malgrès beaucoup d'essai.
 
Merci pour votre aide.

Reply

Marsh Posté le 01-12-2008 à 22:34:24   

Reply

Marsh Posté le 02-12-2008 à 13:18:58    

"Having Max" n'est pas du SQL, ou du moins pas standard.
 
La méthode habituelle consiste à utiliser une sous-requête. Essayer :

SELECT t_obj.ID_OBJ, t_obj.LIBELLE, histo1.VALUE
  FROM t_obj, histo histo1
 WHERE t_obj.ID_OBJ = histo1.ID_OBJ
   AND histo1.DATE
       IN (SELECT MAX(histo2.DATE)
             FROM histo histo2
            WHERE histo2.ID_OBJ = histo1.ID_OBJ);


Message édité par olivthill le 02-12-2008 à 13:19:25
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed