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

Откуда:
Сообщений: 55
Нужна помощь, никак не соображу как мне лучше реализовать сравнение тарифов от различных операторов.
Исходные данные: Различные провайдеры присылают свои тарифы, в различных форматах. Мне требуется их сравнить и выбрать лучшие цены по направлениям. Для этих целей также используется список кодов и направлений от РосСвязи.
Для примера, провайдер может прислать вот такой вариант:
Префикс номераТариф
3011.5
30121
4021.2
402531.3


Сие означает, что все звонки по направлению начинающемуся с 402 стоят по 1,2 руб., кроме направления 40253 по которому стоимость 1,3, т.е. префикс с большим кол-вом цифр имеет приоритет над префиксом с меньшим кол-вом цифр.

Есть две идеи:
1) Привести все к виду, когда не возможна ситуация что один номер попадает под два префикса. Например, из исходной таблицы сделать вот такую:
Префикс номераТариф
3011.53011.5
3021.5
3031.5
3011.5
3011.5
3011.5
3011.5
3011.5
3011.5
30121
27 июл 15, 20:52    [17941883]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение тарифов, как реализовать?  [new]
Androgen1985
Member

Откуда:
Сообщений: 55
Нужна помощь, никак не соображу как мне лучше реализовать сравнение тарифов от различных операторов.
Исходные данные: Различные провайдеры присылают свои тарифы, в различных форматах. Мне требуется их сравнить и выбрать лучшие цены по направлениям. Для этих целей также используется список кодов и направлений от РосСвязи.
Для примера, провайдер может прислать вот такой вариант:
Префикс номера Тариф
301 1.5
3012 1
402 1.2
40253 1.3



Сие означает, что все звонки по направлению начинающемуся с 402 стоят по 1,2 руб., кроме направления 40253 по которому стоимость 1,3, т.е. префикс с большим кол-вом цифр имеет приоритет над префиксом с меньшим кол-вом цифр.

Есть две идеи:
1) Привести все к виду, когда не возможна ситуация что один номер попадает под два префикса. Например, из исходной таблицы сделать вот такую:
Префикс номера Тариф
300 1.5
301 1.5
302 1.5
303 1.5
304 1.5
305 1.5
306 1.5
307 1.5
308 1.5
309 1.5
3012 1



2) Второй вариант привязаться к таблице РосСвязи, проставив ссылки в таблице с тарифами. Но в этом случае потом при обновлении таблицы от РосСвязи придется обновлять все эти ссылки. Вторая проблема в том, что некоторых направлений нет в таблице РосСвязи, и придется в нее довносить данные, и при обновлении ее это все придется учитывать.
27 июл 15, 21:07    [17941960]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение тарифов, как реализовать?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
Androgen1985
Сие означает, что все звонки по направлению начинающемуся с 402 стоят по 1,2 руб., кроме направления 40253 по которому стоимость 1,3, т.е. префикс с большим кол-вом цифр имеет приоритет над префиксом с меньшим кол-вом цифр.
Так ищите, используя LIKE, беря первую найденную запись, из записей, отсортированных в порядке убывания длины префикса.
27 июл 15, 21:18    [17942007]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение тарифов, как реализовать?  [new]
Androgen1985
Member

Откуда:
Сообщений: 55
alexeyvg
Androgen1985
Сие означает, что все звонки по направлению начинающемуся с 402 стоят по 1,2 руб., кроме направления 40253 по которому стоимость 1,3, т.е. префикс с большим кол-вом цифр имеет приоритет над префиксом с меньшим кол-вом цифр.
Так ищите, используя LIKE, беря первую найденную запись, из записей, отсортированных в порядке убывания длины префикса.

А если потребуется сравнить тарифы разных операторов у которых различная система этих префиксов? Хотелось бы какого то хорошего универсального решения
27 июл 15, 21:41    [17942130]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение тарифов, как реализовать?  [new]
Jaffar
Member

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

1.Нужно Исходя из логики предоставленных данных - приводить все к общему виду, но с возможным сокращением объемов данных.
Можно использовать интервалы например с
301 по 312 - 1 р.
31002 по 31002 - 2 р. приоритет будет ест-но у более длинного.

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

А вообще это похоже не конкретную прикладную задачу, где общий ответ никак не поможет.
28 июл 15, 09:00    [17943299]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить