DB-Fiddle:
CREATE TABLE sales (
id int auto_increment primary key,
product VARCHAR(255),
sales_date DATE,
sales_volume INT
);
INSERT INTO sales
(product, sales_date, sales_volume)
VALUES
("Product A", "2019-03-16", "400"),
("Product B", "2019-03-16", "200"),
("Product A", "2019-03-17", "300"),
("Product A", "2019-03-18", "600"),
("Product A", "2019-03-19", "500"),
("Product B", "2019-03-19", "900"),
("Product A", "2020-03-16", "800"),
("Product A", "2020-03-17", "150"),
("Product B", "2020-03-17", "350"),
("Product A", "2020-03-18", "480"),
("Product B", "2020-03-18", "790"),
("Product A", "2020-03-19", "840"),
("Product A", "2020-03-20", "560");
Из таблицы выше я хочу извлечь sum
из sales_volume
BETWEEN "2019-03-16" AND "2019-03-18"
(PY) и BETWEEN "2020-03-16" AND "2020-03-18"
(CY) , чтобы иметь до текущего года сравнение.
Результат должен выглядеть как это:
KPI PY CY
sales_volume 1.500 2.570
С помощью следующего запроса я очень близко подхожу к результату:
SELECT
(CASE
WHEN DATE(sales_date) BETWEEN "2019-03-16" AND "2019-03-18" THEN "PY"
WHEN DATE(sales_date) BETWEEN "2020-03-16" AND "2020-03-18" THEN "CY"
END) AS time,
SUM(sales_volume)
FROM sales
WHERE
DATE(sales_date) BETWEEN "2019-03-16" AND "2019-03-18"
OR DATE(sales_date) BETWEEN "2020-03-16" AND "2020-03-18"
GROUP BY 1;
Однако он разбит на строки:
time SUM(sales_volume)
CY 2.570
PY 1.500
Как мне нужно изменить запрос выше, чтобы получить структуру, как в моем ожидаемом результате?