я иметь следующую таблицуПользовательские расчет суммы
Date Value promo item
01/01/2011 626 0 1230
01/02/2011 231 1 1230
01/03/2011 572 1 1230
01/04/2011 775 1 1230
01/05/2011 660 1 1230
01/06/2011 662 1 1230
01/07/2011 541 1 1230
01/08/2011 849 1 1230
01/09/2011 632 1 1230
01/10/2011 906 1 1230
01/11/2011 961 1 1230
01/12/2011 361 0 1230
01/01/2012 461 0 1230
01/02/2012 928 1 1230
01/03/2012 855 0 1230
01/04/2012 605 0 1230
01/05/2012 83 0 1230
01/06/2012 44 0 1230
01/07/2012 382 0 1230
01/08/2012 862 0 1230
01/09/2012 549 0 1230
01/10/2012 632 0 1230
01/11/2012 2 0 1230
01/12/2012 26 0 1230
Я пытаюсь рассчитать среднюю сумму (SoldAmt)/число О.Д. дней между датой минимального и максимального момента Откат первые 28 строк (4 недели) в который promo = 1 по статье
Сглаживание составляет 4 недели на спине независимо от дневной скидки.
То есть, если такой товар находится в продвижении на неделю в течение последних 4 недель, сглаживание составляет более 5 недель без учета продвижения недели продаж.
Как рассчитать первые 4 недели/28 заказов на заказ по времени для promo = 1?
Стараюсь
CREATE TABLE #RollingTotalsExample
(
[Date] DATE
,[Value] INT
,promo float
,item int
);
INSERT INTO #RollingTotalsExample
SELECT '2011-01-01',626,1,1230
UNION ALL SELECT '2011-02-01',231,1,1230 UNION ALL SELECT '2011-03-01',572,1,1230
UNION ALL SELECT '2011-04-01',775,1,1230 UNION ALL SELECT '2011-05-01',660,1,1230
UNION ALL SELECT '2011-06-01',662,1,1230 UNION ALL SELECT '2011-07-01',541,1,1230
UNION ALL SELECT '2016-08-01',849,1,1230 UNION ALL SELECT '2016-09-01',632,1,1230
UNION ALL SELECT '2016-10-01',906,1,1230 UNION ALL SELECT '2016-11-01',961,1,1230
UNION ALL SELECT '2016-04-01',775,1,1230 UNION ALL SELECT '2016-05-01',660,1,1230
UNION ALL SELECT '2016-06-01',662,1,1230 UNION ALL SELECT '2016-07-01',541,1,1230
UNION ALL SELECT '2016-08-01',849,1,1230 UNION ALL SELECT '2016-09-01',632,1,1230
UNION ALL SELECT '2016-10-01',906,1,1230 UNION ALL SELECT '2016-11-01',961,1,1230
UNION ALL SELECT '2016-12-01',361,0,1230 UNION ALL SELECT '2012-01-01',461,0,1230
UNION ALL SELECT '2012-02-01',928,0,1230 UNION ALL SELECT '2012-03-01',855,0,1230
UNION ALL SELECT '2012-04-01',605,0,1230 UNION ALL SELECT '2012-05-01',83,0,1230
UNION ALL SELECT '2012-06-01',44,0,1230 UNION ALL SELECT '2012-07-01',382,0,1230
UNION ALL SELECT '2012-08-01',862,0,1230 UNION ALL SELECT '2012-09-01',549,0,1230
UNION ALL SELECT '2012-10-01',632,0,1230 UNION ALL SELECT '2012-11-01',2,0,1230
UNION ALL SELECT '2012-12-01',26,0,1230;
SELECT * FROM #RollingTotalsExample;
-- Rolling twelve month total by using INNER JOIN
SELECT a.[Date]
,Value=MAX(CASE WHEN a.[Date] = b.[Date] THEN a.Value END)
,Rolling12Months=CASE
WHEN ROW_NUMBER() OVER (ORDER BY a.[Date]) < 12
THEN NULL
ELSE SUM(b.Value)
END
FROM #RollingTotalsExample a
JOIN #RollingTotalsExample b ON b.[Date] BETWEEN DATEADD(month, -11, a.[Date]) AND a.[Date]
GROUP BY a.[Date]
ORDER BY a.[Date];
Теперь, как изменить запрос, чтобы вычислить среднюю сумму (SoldAmt)/число О.Д. дней между датой мин и макс даты откате порядок данных 28 первых строк по времени промо = 1 статьи
Это хороший вопрос (upvote с моей стороны), особенно из-за к скопированному тестовому коду ** с образцами данных **. Остается только одно: ожидаемый результат, соответствующий данным. Не могли бы вы добавить это на свой вопрос? – Shnugo
Что означает откат первых 12 дней, означает ли это, что вы не хотите, чтобы первый 12-дневный порядок данных по времени для promo = 1? – TheGameiswar
@ TheGameiswar да точно. –