Je demande aux clients des 6 derniers mois de cette manière:
SELECT customer FROM table WHERE date_of_last_order>date_sub(NOW(),INTERVAL 6 MONTH) GROUP BY customer ORDER BY customer ASC
Maintenant, je veux aussi une liste des commandes plus anciennes que 6 mois MAIS elle ne doit PAS inclure les clients des 6 derniers mois.
Des idées? Merci!
3 Réponses :
Vous souhaitez utiliser une clause ayant :
SELECT customer FROM table GROUP BY customer HAVING MAX(date_of_last_order) <= date_sub(NOW(), INTERVAL 6 MONTH) ORDER BY customer ASC
Excellente solution Gordon! :-) Est-il possible d'ajouter un WHERE xyz! = '0' également dans cette CLAUSE? Merci!
Hmm ... qu'en pensez-vous, Gordon? La clause HAVING ne s'appliquerait-elle pas uniquement «down-stream», aux lignes sélectionnées jusqu'à présent?
Une autre possibilité qui me vient à l'esprit est NOT IN ...
...
WHERE date_of_last_order>date_sub(NOW(),INTERVAL 6 MONTH)
AND customer NOT IN (
SELECT DISTINCT customer FROM table
WHERE date_of_last_order < date_sub(NOW(),INTERVAL 6 MONTH)
)
...
... bien que "ça commence à me paraître cher" . Je voudrais certainement appliquer le verbe EXPLAIN aux différentes alternatives que j'ai proposées, pour trouver celle que MySQL considère comme "la moins chère".
Puisque la structure de la table n'est pas décrite, apparemment celles de date_of_last_order <= 6 mois sont ce que vous voulez.
XXX
Quelle est la définition des clients des 6 derniers mois? Un client qui a passé une commande au cours des 6 derniers mois?