web-dev-qa-db-fra.com

MySQL sélectionne toutes les lignes du mois dernier jusqu'à (maintenant -) - 1 mois, à des fins de comparaison

J'ai besoin d'aide pour écrire une requête MySQL afin de me montrer les lignes du mois dernier, mais pas le mois entier, mais uniquement le jour et l'heure, et l'heure identique (), mais 1 mois avant.

Ainsi, par exemple, si nous sommes 5/19 à 17h25 aujourd'hui, je dois sélectionner des rangées de minuit à 12h00 le 16/01 à 17h25 du 19/4 (de la même année bien sûr).

Merci!

63
newyuppie

Vous pouvez obtenir le premier jour du mois en calculant le dernier jour du mois précédent et en ajoutant un jour. C'est maladroit, mais je pense que c'est mieux que de formater une date sous forme de chaîne et de l'utiliser pour le calcul.

select 
  *
from
  yourtable t
where
  /* Greater or equal to the start of last month */
  t.date >= DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY) and
  /* Smaller or equal than one month ago */
  t.date <= DATE_SUB(NOW(), INTERVAL 1 MONTH)
120
GolezTrol

Obtenir il y a un mois est facile avec une seule fonction MySQL:

SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);

ou

SELECT NOW() - INTERVAL 1 MONTH;

De mémoire, je ne trouve pas de moyen élégant d’obtenir le premier jour du mois dernier avec MySQL, mais cela fonctionnera certainement:

SELECT CONCAT(LEFT(NOW() - INTERVAL 1 MONTH,7),'-01');

Assemblez-les et vous obtenez une requête qui résout votre problème:

SELECT *
FROM your_table
WHERE t >= CONCAT(LEFT(NOW() - INTERVAL 1 MONTH,7),'-01')
AND t <= NOW() - INTERVAL 1 MONTH
26
Ike Walker

Code simple s'il vous plaît vérifier

SELECT * FROM table_name WHERE created <= (NOW() - INTERVAL 1 MONTH)
20
Chinmay235

Voici un exemple d'opération de date MySQL pertinente pour votre question:

SELECT DATE_ADD( now( ) , INTERVAL -1 MONTH ) 

Ce qui précède retournera la date et l'heure il y a un mois

Donc, vous pouvez l'utiliser comme suit:

SELECT * 
FROM your_table 
WHERE Your_Date_Column BETWEEN '2011-01-04' 
    AND DATE_ADD(NOW( ), INTERVAL -1 MONTH )
9
Senad Meškin
SELECT * 
FROM table 
WHERE date BETWEEN 
    ADDDATE(LAST_DAY(DATE_SUB(NOW(),INTERVAL 2 MONTH)), INTERVAL 1 DAY) 
    AND DATE_SUB(NOW(),INTERVAL 1 MONTH);

Voir la documentation pour plus d'informations sur DATE_SUB, ADDDATE, LAST_DAY et d’autres fonctions datetime utiles.

4
unutbu

Vous pouvez utiliser une clause WHERE comme:

WHERE DateColumn BETWEEN
    CAST(date_format(date_sub(NOW(), INTERVAL 1 MONTH),'%Y-%m-01') AS date)
    AND
    date_sub(now(), INTERVAL 1 MONTH)
2
Andomar
SELECT *
FROM table
WHERE myDtate BETWEEN now()
    , DATE_SUB(NOW()
    , INTERVAL 1 MONTH)
0
Palantir