2009-01-23 7 views
0

Je veux tirer les emails d'il y a 40 jours et 20 jours, chaque plage étant 1 jour. C'est ce que j'ai mais ça ne renvoie pas de lignes.Comment puis-je interroger à partir de 2 plages de dates (mysql)

SELECT s.*, r.email FROM sellyourcar s 
    INNER JOIN register r ON s.rid = r.slno 
    WHERE s.dt BETWEEN DATE_SUB(curdate(),INTERVAL 20 DAY) AND DATE_SUB(curdate(), INTERVAL 19 DAY) AND 
    s.t BETWEEN DATE_SUB(curdate(),INTERVAL 40 DAY) AND DATE_SUB(curdate(), INTERVAL 39 DAY) 

Répondre

2

Vous devez utiliser un ou au lieu de et pour vos deux intervalles:

SELECT s.*, r.email 
FROM sellyourcar s INNER JOIN register r ON s.rid = r.slno 
WHERE s.dt BETWEEN DATE_SUB(curdate(),INTERVAL 20 DAY) AND DATE_SUB(curdate(), INTERVAL 19 DAY) 
OR s.dt BETWEEN DATE_SUB(curdate(),INTERVAL 40 DAY) AND DATE_SUB(curdate(), INTERVAL 39 DAY) 

Comme une autre note, au moins dans Oracle, je ne suis pas sûr dans MYSQL BETWEEN fonctions renvoie les éléments correspondant les éléments finaux aussi. Par exemple, entre 3 et 5 renvoie également les éléments qui étaient 3 et 5 et pas seulement 4. Ainsi, vous voudrez peut-être simplement vérifier si la date de l'email est inférieure de 20 ou 40 jours à la date actuelle.

+0

Oui, MySQL fonctionne de la même façon. ENTRE. Cela fait partie du langage SQL standard. –

+0

Je le pensais, mais je n'étais simplement pas positif. –

Questions connexes