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!
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)
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
Code simple s'il vous plaît vérifier
SELECT * FROM table_name WHERE created <= (NOW() - INTERVAL 1 MONTH)
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 )
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.
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)
SELECT *
FROM table
WHERE myDtate BETWEEN now()
, DATE_SUB(NOW()
, INTERVAL 1 MONTH)