SQL Server - Совокупный объем данных за предыдущие 5 месяцев до текущего месяца

-3

Мне нужно объединить продажи предыдущих пяти месяцев с текущим месяцем для каждой записи. В приведенной ниже таблице, например,

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 месяцев.

Можно ли это сделать без использования курсоров? Может ли кто-нибудь предложить решение?

спросил(а) 2018-06-06T16:33:00+03:00 1 год, 6 месяцев назад
1
1 ответ
66

Вы можете использовать самостоятельное соединение, чтобы получить более старые значения. то есть:

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

ответил(а) 2018-06-06T17:25:00+03:00 1 год, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема