Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Код не заменяет медиану по выбросам  [new]
Kontox
Member

Откуда:
Сообщений: 146
все подпилиываю этот код

;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
т.е. раздельно для каждой такой группы


но сейчас он что-то не отрабатывает
вот набор данных

желтые исходные данные

зеленые то что он поназакменял
красные это то что по какой то причине не было заменено
подскажите, почему он где-то правильно отработал, а где-то проигнорировал

К сообщению приложен файл (perc.xlsx - 12Kb) cкачать
3 июл 18, 18:11    [21540201]     Ответить | Цитировать Сообщить модератору
 Re: Код не заменяет медиану по выбросам  [new]
iiyama
Member

Откуда:
Сообщений: 642
Kontox,

Замените UPDATE на SELECT и посмотрите почему не выполняется условия, примерно так
--Update a 
--Set SaleCount = cte.median
select 
	a.SaleCount , cte.median
	, CTE.PERCENTILE , CTE.SaleCount -- проверить CTE.PERCENTILE < CTE.SaleCount
	,datePart(WEEKDAY,CTE.Dt)  -- проверить datePart(WEEKDAY,CTE.Dt) < 7
	,CTE.ispromo -- проверить CTE.ispromo = 0 ;
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
3 июл 18, 18:44    [21540323]     Ответить | Цитировать Сообщить модератору
 Re: Код не заменяет медиану по выбросам  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36887
Модератор: Будьте добры подпиливать в одной теме


Сообщение было отредактировано: 3 июл 18, 18:45
3 июл 18, 18:45    [21540327]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить