programing

이전 달을 계산하는 MySQL 쿼리

lastcode 2023. 10. 14. 10:17
반응형

이전 달을 계산하는 MySQL 쿼리

전월의 총 주문금액을 계산하고 싶습니다.

저는 현재 날짜에서 이번 달 데이터를 받기 위한 문의를 받았습니다.

SELECT SUM(goods_total) AS Total_Amount  FROM orders
WHERE order_placed_date >= date_sub(current_date, INTERVAL 1 MONTH);

이제 이번 달을 제외하고 이전 달 데이터만 가져오려면 어떻게 해야 합니까?

예를 들어.이번 달(7월)에는 15,000달러를 벌었고 지난달(6월)에는 14,000달러를 벌었습니다.

위 쿼리를 실행하면 15,000달러를 받습니다.

하지만 이전 달을 계산하는 방법을 모릅니다.

여기 있습니다. MySQL에서 지난달 1일부터 지난 달 말 사이의 날짜를 가져오려면 다음과 같이 하십시오.

... 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')

가장 간단한 솔루션:

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)

Artem의 쿼리가 전달 마지막 날에 반환되지 않는 것을 발견했습니다(아마도 BETWENT는 마지막 날의 00:00:00부터 계산될 것입니다).

이것은 지난 한 달간은 제게 도움이 될 것 같습니다.

order_placed_date BETWEEN DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01')
AND DATE_FORMAT(NOW() ,'%Y-%m-01')

여기 또 다른 솔루션 - 문자열 연산 없이

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));

제가 찾은 또 다른 방법은 다음과 같습니다.

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) 

이것도 효과가 있습니다.

귀찮으면 사용하기 편합니다.

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

가독성도 높인다고 생각합니다.

이를 위한 한 가지 방법:

DATE_ADD

... WHERE order_placed_date >= DATE_ADD(NOW(), INTERVAL -60 DAY) 
      AND order_placed_date <= DATE_ADD(NOW(), INTERVAL -30 DAY)

언급URL : https://stackoverflow.com/questions/1138190/mysql-query-to-calculate-the-previous-month

반응형