Bonjour.
Travaillant actuellement sur le développement de la partie statistique d'un back-office, je n'arrive pas à trouver la requête miracle qui m'évitera d'avoir à procéder par étapes.
But recherché: savoir, parmi les clients qui ont commandés sur un mois donné, ceux qui en sont à leur première commande, ceux qui en sont à leur 2e, à leur 3e, à leur 4e ou à 5 et +.
Actuellement, je procéde ainsi
pour connaitre les clients ayant commandés en mars qui n'en sont qu'à leur première commande, puis je regarde le nombre de réponses retournées (j'ai bien essayé d'envelopper la requéte dans un SELECT COUNT() général, mais j'ai un message d'erreur et passe donc par l'instruction php mysql_num_rows).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT a.id_client, COUNT( DISTINCT b.id_commande ) AS nb_commandes FROM commande a INNER JOIN commande b ON ( a.id_client = b.id_client AND b.date_commande < "2008-04-01 00:00:00") WHERE a.date_commande BETWEEN "2008-03-01 00:00:00" AND "2008-03-31 23:59:59" GROUP BY a.id_client HAVING nb_commandes=1
Comme je veux 5 nombres, je répéte l'opération 5 fois, en changeant chaque fois la condition de monY'aurait-il moyen d'optimiser tout ça pour obtenir le résultat souhaité en une seule et unique requéte?
Code : Sélectionner tout - Visualiser dans une fenêtre à part HAVING nb_commandes
Merci d'avance.
P.S.: le serveur est en MySQL 4.0.2, donc sous-requétes impossibles.
Partager