Bạn có thể để kết hợp truy vấn với chính nó trên số của tháng trừ đi 1. Sau đó, bạn có tổng của tháng một tháng trước trong một hàng và có thể tính toán phần trăm. Tương tự như sau:
SELECT monthname(concat('1970-', lpad(A.MONTH, 2, '0'), '-01')) AS MONTH,
A.SALE_PRICE,
CASE
WHEN A.SALE_PRICE IS NULL
THEN NULL
WHEN B.SALE_PRICE IS NULL
THEN NULL
WHEN A.SALE_PRICE = 0
THEN NULL
ELSE
(B.SALE_PRICE / A.SALE_PRICE - 1) * 100
END AS PERCENTAGE
FROM (SELECT month(DATE_PURCHASED) AS MONTH,
sum(SALE_PRICE) AS SALE_PRICE,
FROM SALE
WHERE year(DATE_PURCHASED) = 2017
GROUP BY MONTH) A
LEFT JOIN (SELECT month(DATE_PURCHASED) AS MONTH,
sum(SALE_PRICE) AS SALE_PRICE,
FROM SALE
WHERE year(DATE_PURCHASED) = 2017
GROUP BY MONTH) B
ON A.MONTH - 1 = B.MONTH
ORDER BY A.MONTH;
Lưu ý A
và B
là truy vấn của bạn, chỉ được sửa đổi để tháng có dạng số vì điều này là cần thiết trong ON
mệnh đề.