2016-08-08 3 views
0

ЦЕЛЬОкругление до ближайшего, учитывая уровень

Разработка модели ценообразования на основе от текущих СКИДОК клиентов. Обратите внимание, что текущие СКИДКИ КЛИЕНТОВ не все одинаковы (например, клиент A получает скидку 25,25%, а клиент B получает скидку 25,1238%).

ПОДХОД

  1. вычислить ПОЛЬЗОВАТЕЛЬ существующего, взвешенная СКИДКА (завершены)

  2. Создание таблицы скидок с диапазонами (например, "Бронзовый discount" = 0-15%, Серебро = 15-25%, Золото = 25% -35% и т. Д.) (заполнено)

  3. Место cu stomers в ближайшего (!!!) ярусе согласно таблице скидок (НЕПОЛНАЯ)

ВЫПУСКА

Я с трудом округление кто-то до ближайшего уровня с округлением переменная (т.е. «ближайшие 10%») фактически меняется - первый уровень = 15%, второй уровень = 10%, третий уровень = 25%. Поскольку уровень изменяется, Allen Browne's strategy не хватает.

Обратите внимание, что я пытаюсь подтолкнуть людей к NEAREST уровню, основанному на их ТЕКУЩЕЙ СКИДКЕ и новой СТОЛБ СКИДКИ; просто проверка того, кто-то падает между двумя уровнями таблицы, недостаточен.

ПРИМЕР

Таблица: Бронзовый = 0-15% серебро = 15-25%

клиентов А, существующий средневзвешенной учетной = 15,50%, новые Рассчитано уровня = 25% (СЕРЕБРО) клиентов B, существующие Средневзвешенные скидка = 14,95%, New Рассчитано уровня = 15% (БРОНЗА)

в упомянутой выше случае, Клиент а получает огромную скидку по сравнению с клиентами B, despit e их существующие средневзвешенные значения близки. Новый расчетный уровень клиента А неверен и должен быть помещен в Бронзовый пакет.

ВОПРОС (S)

  1. Как я могу эффективно разместить клиента в ближайшем ярусе?
+0

ближе всего действительно подходящее слово? Это в сторону, так как диапазоны не перекрываются, вы должны просто иметь возможность: ... C INNER JOIN DT ON C.currentDiscount> = DT.tierBegin AND C.currentDiscount Uueerdo

+0

Правильно - я ищу клиентов, чтобы они попадали в ближайший уровень, будь то этот уровень выше или ниже их текущего существующего дисконта – jonplaca

+0

@ Аndre, что указывало на необходимость изменения тега от 'mysql' до' ms-access'? – Uueerdo

ответ

1

Вам нужно только более высокий процент, как:

Bronze = 15 
Silver = 25 
Gold = 35 

А потом:

Select 
    Customers.*, 
    (Select Top 1 Discount.DiscountName 
    From Discount 
    Order By Abs(Discount.Percentage - Customer.Discount) Asc) As CustomerDiscount 
From Customers 
+0

Закончено преобразование вашего подхода в формат Excel, чтобы менеджеры могли легко манипулировать уровнями цен. Для тех, кто интересуется формулой excel, см .: INDEX (B1: B20, MATCH (MIN (ABS (A1: A20-C1)), ABS (A1: A20-C1), 0)), от: https://answers.microsoft.com/en-us/office/forum/office_2007-excel/finding-the-ultimate-closest-number-in-table/f9b4955d-6141-452b-83f2-747e5497a87d?auth= 1 – jonplaca

0

Поскольку я не уверен в вашей точной структуру таблицы, что-то вроде этого мощи работы или быть хорошей отправной точкой.

SELECT c.CustomerID 
, (SELECT DiscountID 
    FROM discounts AS d 
    ORDER BY ABS(d.ceiling-c.currentDiscount) ASC 
    LIMIT 1) AS nearestDiscountID 
FROM customers AS c 
Смежные вопросы