[MySQL] Double datage de valeurs et selection des plus recentes

Double datage de valeurs et selection des plus recentes [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 08-04-2009 à 12:13:18    

Bonjour a tous,
 
J'ai un probleme sur le double datage de donnees et leur selection. En gros, j'ai une table qui contient des donnees relatives a la valeur d'un objet pour une date donnee.
Cette valeur n'est pas forcement connue a la date T et peut fluctuer avant que sa valeur soit definitivement determinee.
 
Par exemple, le prix de l'objet A au 01-04-2009 avait ete estime etre 400€ le 29-03-2009, revu a 390€ le 02-04-2009 et le reporting nous dit le 03-04-2009 qu'en fait il etait a 410€.
 
Au lieu d'update la table pour changer la valeur au fur et a mesure, on veut pouvoir garder une trace des fluctuations des estimations. Ainsi la table a les champs suivant:
 
id_object | date_value | entry_date | value
 
Si on reprend mon exemple on aurait les entrees suivantes :
 
001 | 01-04-2009 | 29-03-2009 | 400
001 | 01-04-2009 | 02-04-2009 | 390
001 | 01-04-2009 | 03-04-2009 | 410
 
 
Maintenant ce que j'aimerai c'est recuperer dans une query l'entree pour chaque objet qui corresponde au dernier prix que l'on aura entre (prix qui s'avere etre le plus exact).
 
J'ai tente d'utiliser cette query:
 

Code :
  1. SELECT id_object, date_value, Max(entry_date), value
  2. FROM objet_price
  3. GROUP BY id_object


 
Mais ca ne me donne pas les entry correspondantes a la Max(entry_date) qui sont celle que j'aimerai pour chaque date_value et id_object.
Je ne dois pas regarder le probleme comme il faut mais je ne vois pas trop d'autre solution si ce n'est de selectionner chaque id_object/date_value et de refaire une query ou je selectionnerai la valeur maximum

Reply

Marsh Posté le 08-04-2009 à 12:13:18   

Reply

Marsh Posté le 08-04-2009 à 13:01:47    

Bon je crois avoir trouve, je mets la solution au cas ou ca puisse servir a quelqu'un d'autre:
 
Le probleme vient du fait que la fonction Max() ne considere pas chaque entree, mais plutot les valeurs d'un colonne.
 
Du coup il faut contourner le probleme avec une sous-query
 

Code :
  1. SELECT * FROM object_price p1
  2. WHERE entry_date =
  3. (
  4. SELECT Max(entry_date) FROM object_price p2
  5. WHERE p1.id_object = p2.id_object AND p1.date_value = p2.date_value
  6. )
  7. GROUP BY id_object, date_value


 
Ainsi pour chaque object et chaque date_value, on va recupere la value correspondant a l'entry_date la plus recente.

Reply

Sujets relatifs:

Leave a Replay

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