SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 14.07.2010 23:37:10

4e1ovek
Участник
Зарегистрирован: 14.07.2010
Сообщений: 5

Запрос на изменение льготного тарифного плана

Здравствуйте.
Встала задача перевести абонентов Интернет провайдера одного тарифного плана (льготного) на тариф-наследник после прошествия пяти месяцев, но необходимо учитывать тот факт что пользователь мог в этот период отключаться (уезжал – попросил отключить его, дабы не начислялась абонентская плата), в это время его тарифный план имел ID=0. То время, которое он не работал нужно вычитать из общего времени работы пользователя. Например, он отключался на 10 дней, то и перевести на тариф-наследник его нужно через 5 месяцев 10 дней.

Базы данных (биллинговая система и система управления (надстройка на биллингом)) расположены на разных серверах, поэтому сделать в один запрос данное действие не получится.
Тогда будем определять, каких абонентов необходимо переключить на тариф-наследник, а уже языком скрипта, с учётом информации из базы системы управления, переключать необходимого пользователя в БД биллинга.

Выстроил следующий алгоритм:
1. В истории изменений тарифных планов выбираем всех абонентов с текущим тарифом равному одному из льготных.
2. Просматриваем всю историю абонента, вычитаем время отключенного состояния.
3. Если сумма времени работы абонента равно, либо превышает 5 месяцев, то переводим его с льготного тарифа на тариф-наследник.

Таблица «CONNECT_TARIFS_HIST» изменений тарифных планов биллинговой системы:


ID_CTH    ID_CONNECT    ID_TARIF    DT    USER_NAME    
318            738        12    08.02.06    FREEZE
323            743        12    13.02.06    FREEZE
326            542        42    01.02.06    ADMIN
332            750        12    20.02.06    ADMIN
333            751        12    21.02.06    FREEZE
337            519        48    27.02.06    SERG
338            241        54    27.02.06    SERG
339            272        49    27.02.06    SERG
340            270        49    27.02.06    SERG
....
10682        7443        244    15.01.10    SOZNIK
15327        7443        226    15.06.10    TREGUBOVA
 
Провожу эксперименты над абонентом, ID_CONNECT=7443 (ID_подключения).
Сначала ему назначали льготный тариф ID_TARIF=244, затем после 5 месяцев поменяли на тариф-наследник (в данный момент это делается вручную) ID_TARIF=226.

Пытаюсь написать простенький запрос, без учёта возможных отключения абонента за этот срок:

SELECT
  id_connect,
  id_tarif
FROM
  connect_tarifs_hist
WHERE
  id_connect = 7443
GROUP BY
  id_connect,
  id_tarif
ORDER BY
  id_connect ASC,
  id_tarif DESC
 
Именно в таком виде он работает, но смысла от него ноль, так как выводится оба тарифа у данного ID_CONNECT (ID_подключения), что в принципе верно исходя из запроса, но что-то на иные варианты для нахождения именно последнего тарифного плана не хватает навыков.

Если возможно, то пожалуйста приведите вариант запроса на нахождения абонентов для изменения тарифного плана на льготный, с учётом возможного отключения от сети по просьбе самого абонента и вычитания этого срока из общего срока работы.

Отредактированно 4e1ovek (14.07.2010 23:45:00)

Неактивен

 

#2 15.07.2010 14:16:43

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос на изменение льготного тарифного плана

Для того, чтобы найти последний тариф, Вам нужно просто найти id этих
строк, а потом выбирать данные:
SELECT MAX(ID_CTH) FROM CONNECT_TARIFS_HIST GROUP BY ID_CONNECT;

Что касается подсчета дат — тут без полного прохода по таблице, думаю,
не обойтись. Т.е. надо делать что-то типа
SELECT @dt := MIN(dt) FROM CONNECT_TARIFS_HIST WHERE ID_CONNECT=7443;
SELECT ID_TARIF, @dt as FROM, @dt := DT as TO FROM CONNECT_TARIFS_HIST WHERE ID_CONNECT=7443;
И потом по получившейся выборке уже считать даты.

Да, для каждого пользователя отдельно.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson