0
votes

Clients âgés de plus de 6 mois mais pas plus récents

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!


1 commentaires

Quelle est la définition des clients des 6 derniers mois? Un client qui a passé une commande au cours des 6 derniers mois?


3 Réponses :


5
votes

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


1 commentaires

Excellente solution Gordon! :-) Est-il possible d'ajouter un WHERE xyz! = '0' également dans cette CLAUSE? Merci!



-1
votes

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".


0 commentaires

0
votes

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


0 commentaires