Requête MySQL pour calculer le mois précédent
je voudrais calculer le montant total de la commande dans le mois précédent.
j'ai reçu la requête pour obtenir les données pour le mois présent à partir de la date actuelle.
SELECT SUM(goods_total) AS Total_Amount FROM orders
WHERE order_placed_date >= date_sub(current_date, INTERVAL 1 MONTH);
maintenant, comment puis-je obtenir les données des mois précédents seulement, à l'exclusion de ce mois.
par exemple pour ce mois (juillet) j'ai fait $15,000 et le mois dernier(juin) j'ai fait $14,000.
j'obtiens les 15.000 $en lançant la requête ci-dessus.
mais je ne sais pas comment calculer les mois précédents.
6 réponses
ici vous allez, utilisez ceci pour obtenir la date entre le 1er du mois dernier et le dernier du mois dernier à MySQL:
... order_placed_date BETWEEN DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01 00:00:00')
AND DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH), '%Y-%m-%d 23:59:59')
J'ai trouvé que la requête D'Artem ne retournait rien du dernier jour du mois précédent(probablement comme entre les calculs de temps 00:00:00 du dernier jour).
Cela semble fonctionner pour moi, pour le mois précédent.
order_placed_date BETWEEN DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01')
AND DATE_FORMAT(NOW() ,'%Y-%m-01')
solution la plus simple:
SELECT SUM(goods_total) AS Total_Amount FROM orders
WHERE YEAR(order_placed_date) = YEAR(CURDATE() - INTERVAL 1 MONTH)
AND MONTH(order_placed_date) = MONTH(CURDATE() - INTERVAL 1 MONTH)
Voici une autre façon que j'ai trouvé:
SELECT SUM(goods_total) AS Total_Amount FROM orders
WHERE SUBSTRING(o.order_placed_date FROM 1 FOR 7) = SUBSTRING(CURRENT_DATE - INTERVAL 1 MONTH FROM 1 FOR 7)
Cela fonctionne ainsi.
voici une autre solution-sans stringoperation
SELECT SUM(goods_total) AS Total_Amount FROM orders
WHERE DATE(order_placed_date)
BETWEEN DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY)
AND LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH));