все подпилиываю этот код
;with cte as (
Select *,datePart(WEEKDAY,Dt) as WeekDay,
PERCENTILE_cont(0.75) WITHIN GROUP (ORDER BY SaleCount) Over (partition by CustomerType,[CustomerName],ItemRelation, DocumentNum, DocumentYear) as PERCENTILE,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY SaleCount) over (Partition by CustomerType, [CustomerName],
ItemRelation, DocumentNum, DocumentYear,
datePart(WEEKDAY,Dt), IsPromo) as median
From promo_data_copy2)
Update a
Set SaleCount = cte.median
From CTE
join promo_data_copy2 a
on a.Dt = cte.dt
and a.ItemRelation=cte.ItemRelation
and a.CustomerName=cte.CustomerName
and a.DocumentNum = cte.DocumentNum
and a.DocumentYear = cte.DocumentYear
and a.CustomerType = cte.CustomerType
and a.ispromo = cte.ispromo
Where CTE.PERCENTILE < CTE.SaleCount
and datePart(WEEKDAY,CTE.Dt) < 7
and CTE.ispromo = 0 ;
его шаги
* есть переменная ispromo, она принимает или 1 или 0
код должен работать с нулевой категорией
1. высчитать 75 процентиль по всем наблюдениям нулевой категории ispromo по переменной SaleCount
2. все что выше 75 процентиля код должен заменять медианой выбросы тех дней, на который он пришолся
например выброс пришелся на четверг
значит смотрим медиану всех четвергов и заменяем ею выбросный четверг
3. и все это код делает для групп сustomerType+[CustomerName]+
ItemRelation+DocumentNum+DocumentYear
т.е. раздельно для каждой такой группы
но сейчас он что-то не отрабатывает
вот набор данных
желтые исходные данные
зеленые то что он поназакменял
красные это то что по какой то причине не было заменено
подскажите, почему он где-то правильно отработал, а где-то проигнорировал