Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Код не заменяет медиану по выбросам / 3 сообщений из 3, страница 1 из 1
03.07.2018, 18:11
    #39669059
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код не заменяет медиану по выбросам
все подпилиываю этот код

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


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

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

зеленые то что он поназакменял
красные это то что по какой то причине не было заменено
подскажите, почему он где-то правильно отработал, а где-то проигнорировал
...
Рейтинг: 0 / 0
03.07.2018, 18:44
    #39669070
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код не заменяет медиану по выбросам
Kontox,

Замените UPDATE на SELECT и посмотрите почему не выполняется условия, примерно так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
--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
...
Рейтинг: 0 / 0
03.07.2018, 18:45
    #39669072
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код не заменяет медиану по выбросам
Модератор: Будьте добры подпиливать в одной теме
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Код не заменяет медиану по выбросам / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]