Après plusieurs heures de recherche, je cède finalement et demande de l'aide. J'ai trouvé quelque chose qui me rapproche, mais ne semble pas fonctionner correctement.MYSQL - Sélection des utilisateurs existants qui n'ont pas fait d'entrée dans les 3 derniers mois, mais qui ont fait une entrée dans les 6 derniers mois
Essentiellement à la recherche d'utilisateurs qui nous utilisent entre 3 mois et 6 mois, mais qui ne l'ont pas fait depuis 3 mois.
Par souci de l'exemple permet de dire que j'ai deux tables événement nommé (id, clientFK, insertion_date, officeFK) et client (id, nom):
SELECT DISTINCT e.id, e.insertion_date, c.name
FROM event e
LEFT JOIN client c ON c.id = e.clientFK
WHERE e.id NOT IN (
SELECT e.id
FROM event e
WHERE e.insertion_date
BETWEEN (
NOW() - INTERVAL 3
MONTH
)
AND NOW()
)
AND e.insertion_date > (NOW() - INTERVAL 6
MONTH)
AND officeFK =1
ORDER BY e.insertion_date DESC
** Mise à jour ** * id est juste une colonne auto-incrémentée donc évidemment, elle ne s'afficherait jamais en utilisant la logique ci-dessus. Je voulais chercher le clientFK dans la table des événements. Sur la base de la première réponse ci-dessous je suis venu avec ceci:
SELECT DISTINCT e.clientFK, e.insertion_date, c.name
FROM event e
LEFT JOIN client c ON c.id = e.clientFK
WHERE e.clientFK NOT IN (
SELECT e.clientFK FROM event e
WHERE e.insertion_date > (NOW() - INTERVAL 3 DAY)
)
AND e.insertion_date BETWEEN (NOW() - INTERVAL 3 DAY) AND (NOW() - INTERVAL 6 MONTH)
AND officeFK =1
ORDER BY e.insertion_date DESC
Cependant, même si la réduction de l'NOT IN à seulement 3 sous_requête jours, je suis toujours retourner 0 lignes. La modification de NOT IN à IN entraîne également 0 lignes retournées. Il y a des milliers de lignes dans ma table d'événements où le clientFK est "PAS DANS" les 3 derniers jours. Je dois faire quelque chose de mal quelque part.
CORRECT CODE CI-DESSOUS:
SELECT DISTINCT e.id, e.insertion_date, c.name
FROM event e
JOIN client c ON c.id = e.clientFK
WHERE e.clientFK NOT IN (
SELECT e.clientFK FROM event e
WHERE e.insertion_date > (NOW() - INTERVAL 3 MONTH)
)
AND e.insertion_date < (NOW() - INTERVAL 3 MONTH)
AND insertion_date > (NOW() - INTERVAL 6 MONTH)
AND e.officeFK = 1
ORDER BY e.insertion_date DESC
Vous avez raison sur ma plage de dates. J'ai corrigé cela, mais je retourne toujours 0 lignes. Voir la mise à jour que j'ai faite au message original ci-dessus. –
Merci pour votre aide jusqu'à présent !!! –
J'ai mis à jour mon code. Divisez la requête en plusieurs parties et vérifiez la sortie. C'est exécuter la sous-requête seulement et voir ce qu'il trouve. J'ai également abandonné le 'LEFT JOIN' juste pour' JOIN '. –