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.

20
demandé sur Ibn Saeed 2009-07-16 18:52:56

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')
51
répondu Artem Russakovskii 2018-09-09 16:13:41

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')
7
répondu Shane 2011-12-01 16:10:56

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)
4
répondu BigBadMe 2015-02-21 16:23:40

si vous êtes paresseux, il est assez pratique d'utiliser

...date_format(order_placed_date, '%Y-%m') = date_format(now() - INTERVAL 1 MONTH, '%Y-%m')

je pense que ça augmente la lisibilité.

0
répondu 2009-07-16 15:11:04

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.

0
répondu Ibn Saeed 2009-07-16 15:26:07

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));
0
répondu fubo 2014-01-09 13:15:23