Aller au contenu

Ne récupérer que la commande la plus récente


toma

Sujets conseillés

Bonjour,

Je me trifouille les neurones mais là je bute sur un truc à la noix. J'ai une table composée comme ceci :

commandes

commandes_date

customers_id

Voici un résultat d'un SELECT sur tout :

commandes_date	 customers_id
2008-07-15 60
2008-08-17 60
2008-06-12 65
2008-06-07 70
2008-09-21 70

J'exporte le tout dans un fichier csv.

Mon but est de conserver uniquement la commande la plus récente pour un customers_id donné.

Si quelqu'un peut me filer un coup de main ce serait bien apprécié parce que là je bute.

Merci d'avance !

Modifié par Dan
Inutile de mettre [SOLVED] ou [RESOLU] dans le titre. Dan
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

SELECT MAX(commandes_date) AS date_commande FROM ta_table WHERE customers_id=60

Devrait te retourner la date la plus recente pour le customers_id 60

Modifié par rdd
Lien vers le commentaire
Partager sur d’autres sites

En fait voici ma requête, car il faut aussi que je fasse un WHERE sur le statut, pour ne récupérer que les commandes qui ont été validées :

SELECT * FROM customers c, commandes co WHERE c.customers_id=co.customers_id AND co.commandes_status='1' ORDER BY c.customers_id ASC

Je ne fais pas de WHERE sur un seul id.

Lien vers le commentaire
Partager sur d’autres sites

mmm merci pour le tuyau. Effectivement, ça ne me retourne que la commande la plus récente pour chaque customers_id dont la commande a le statut à 1.

Mais ça ne me retourne que les champs date_commande et customers_id. je voudrais aussi récupérer toutes les coordonnées des customers (ds la table correspondante) et j'ai essayé avec ceci :

SELECT MAX( commandes_date ) AS date_commande, c.customers_id, c.customers_prenom
FROM commandes co, customers c
WHERE co.commandes_status = '1'
AND co.customers_id = c.customers_id
GROUP BY customers_id

Et ça a l'air de marcher... je suis fébrile...

Lien vers le commentaire
Partager sur d’autres sites

SELECT MAX( commandes_date ) AS date_commande, c.customers_id, c.customers_prenom
FROM commandes co, customers c
WHERE co.commandes_status = '1' AND co.customers_id = c.customers_id
GROUP BY c.customers_id, c.customers_prenom

Pour info : tous les champs placés dans le "SELECT" et qui ne sont pas entourés d'une fonction type SUM, AVERAGE, MAX, MIN etc... doivent être présente dans le GROUP BY

Lien vers le commentaire
Partager sur d’autres sites

Normalement, si tu fais ceci :

SELECT MAX( commandes_date ) AS date_commande, c.customers_id, c.customers_prenom
FROM commandes co, customers c
WHERE co.commandes_status = '1' AND co.customers_id = c.customers_id
GROUP BY customers_id

Tu dois avoir une erreur sur le "c.customers_prenom" car il n'est pas présent dans le group by.

Pour info : http://dev.mysql.com/doc/refman/5.0/fr/gro...den-fields.html

Donc pour Mysql, le c.customers_prenom est "implicite" mais à manier avec précaution.

Portekoi

Lien vers le commentaire
Partager sur d’autres sites

Hummm ok, intéressant à savoir. Il faudra que je me trouve un livre pour potasser tout ça, car dans les mois à venir je vais avoir à faire des requêtes de plus en plus complexes... Quelqu'un a une bonne référence de livre plutôt "pratique" que théorique ?

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...