SQL Server - Совокупный объем данных за предыдущие 5 месяцев до текущего месяца
Мне нужно объединить продажи предыдущих пяти месяцев с текущим месяцем для каждой записи. В приведенной ниже таблице, например,
StoreID |Month |Sales
-----------|----------|----------
119119 |201802|50000
119119 |201803|62500
119119 |201804|93750
119119 |201708|45000
119271 |201803|25000
119271 |201804|75000
119271 |201802|50000
Суммарные продажи StoreID 119119 за месяц 201804 должны составлять 50000 + 62500 + 93750.
Совокупные продажи за 119119 за месяц 201803 должны быть 62500 + 50000 и так далее.
Мне нужно сделать это, чтобы я смог построить этот агрегированный столбец на графике временного ряда.
Я не могу использовать ASC ROWS 5 PRECEEDING здесь, потому что не может быть данных о продажах за каждый месяц, и я не должен собирать предыдущие 5 записей, но он должен быть строго основан на предыдущих продажах за 5 месяцев.
Можно ли это сделать без использования курсоров? Может ли кто-нибудь предложить решение?
Вы можете использовать самостоятельное соединение, чтобы получить более старые значения. то есть:
DECLARE @stores TABLE(StoreID INT, [Month] VARCHAR(6), Sales INT);
INSERT INTO @stores(StoreID, Month, Sales)
VALUES(119119, '201802', 50000),
(119119, '201803', 62500),
(119119, '201804', 93750),
(119119, '201708', 45000),
(119271, '201803', 25000),
(119271, '201804', 75000),
(119271, '201802', 50000);
WITH
Sales AS (SELECT StoreID, CAST([Month]+'01' AS DATE) AS [Month], Sales FROM @stores)
SELECT s1.StoreID, s1.[Month], SUM(s2.Sales) AS total
FROM Sales s1
inner JOIN Sales s2 ON s1.StoreID=s2.StoreID
AND s1.[Month]>=s2.[Month]
AND DATEDIFF(MONTH, s2.[Month], s1.[Month])<5
GROUP BY s1.StoreID, s1.[Month]
ORDER BY s1.StoreID, s1.[Month];
- Вопросы
- Sql-server
- SQL Server - Совокупный объем данных за предыдущие 5 месяцев до текущего месяца