Как рассчитать стоимость звонка с помощью SQL-запроса для биллинга - PullRequest
0 голосов
/ 13 апреля 2011

Кто-нибудь или кто-нибудь знает, как рассчитать плату за вызовы из таблицы журнала вызовов и таблицы тарифов в sql и поместить вывод в новую таблицу ???

тарифные ставки за секунды или минуты.

Не могли бы вы предоставить несколько примеров запросов?

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

CREATE TABLE cdr (
accountcode VARCHAR (30),
src VARCHAR(64),
dst VARCHAR(64),
dcontext VARCHAR(32),
clid VARCHAR(32),
channel VARCHAR(32),
dstchannel VARCHAR(32),
lastapp VARCHAR(32),
lastdata VARCHAR(64),
calldate TIMESTAMP NOT NULL,
answerdate TIMESTAMP NOT NULL,
hangupdate TIMESTAMP NOT NULL,
duration INT(8) UNSIGNED DEFAULT NULL,
billsec INT(8) UNSIGNED DEFAULT NULL,
disposition VARCHAR(32),
amaflags VARCHAR(128),
PRIMARY KEY (clid,channel,calldate)
);

и для тарифных ставок, пиковых и непиковых у меня есть:

CREATE TABLE tariffs (ratestart TIME, rateend TIME, ratecharged DECIMAL(10,8));

INSERT INTO tariffs(ratestart, rateend, ratecharged)
    VALUES("08:00:00", "19:00:00", 3.3333);
INSERT INTO tariffs(ratestart,rateend,ratecharged)
    VALUES("19:00:00", "08:00:00", 1.5555);

Я бы хотел, чтобы вывод стоимости звонка был преобразован в новую таблицу с номерами звонков, источником, адресатом, продолжительностью звонка, тарифом и стоимостью звонка.

Также я должен создать другую таблицу со списком пользователей? А также, как кто-либо будет снят с пика в выходные дни?

1 Ответ

1 голос
/ 13 апреля 2011

Вы должны упростить свою жизнь, добавив больше данных в таблицу тарифов:

INSERT INTO tariffs(ratestart, rateend, ratecharged)
    VALUES("00:00:00", "08:00:00", 1.5555);
INSERT INTO tariffs(ratestart, rateend, ratecharged)
    VALUES("08:00:00", "19:00:00", 3.3333);
INSERT INTO tariffs(ratestart, rateend, ratecharged)
    VALUES("19:00:00", "24:00:00", 1.5555);

Это упрощает обработку вызовов, разделяя тарифы ранним утром и поздним вечером.(Возможно, вам придется использовать «23: 59: 59» вместо «24: 00: 00», если вы не можете хранить полночь таким образом, но затем вам нужно настроить другое время окончания на 1 секунду перед переходом,и вы изменяете запросы, чтобы использовать '<= rateend' вместо '< rateend'.)

Вам нужно беспокоиться о вызовах, которые перекрывают два тарифных периода?А как насчет звонков, которые длятся больше, чем весь тарифный период?Более 24 часов?

Вам также следует перевести используемые вами термины.Например, вы запрашиваете:

с Callerid, Источник, Назначение, Длительность звонка, тариф и стоимость звонка

  • CallerID ⟶ clid
  • Источник ⟶ src
  • Направление ⟶ dst
  • Продолжительность звонка ⟶ duration
  • Тариф ⟶ ratecharged

Какие единицы измерения используются для измерения продолжительности звонка?Является ли режим зарядки просто тарифом, который применялся, когда начался звонок, поэтому кто-то, звонящий в 07:59:59 в течение 12 часов, может разговаривать по ночному тарифу?Чем длительность звонка отличается от расчетных секунд?Следует ли использовать в расчетах расчетные секунды?

Вы также можете посмотреть на предыдущий вопрос, который был очень похож на этот:

...