Как запросить таблицы, чтобы узнать стоимость звонка - PullRequest
0 голосов
/ 12 апреля 2011

Какой запрос мне нужно сделать, чтобы рассчитать стоимость звонков в базе данных mysql?

У меня есть две таблицы, одна - журнал вызовов с продолжительностью звонка, а другая - таблица тарифов с пиком иВ нерабочее время пиковое время - с 08:00:00 до 19:00:00. В нерабочее время - с 19:00:00 до 08:00:00.скорость для пика, скажем, 10p в минуту или 0.9992 в секунду или что-то в этом роде.и отключить 2p минуты.

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

Вывод будет на другую таблицу с CallerId, источником, назначением, продолжительностью звонка, стоимостью звонка

1 Ответ

0 голосов
/ 26 апреля 2011

Это кажется относительно прямым (что обычно означает, что я что-то упустил).

Начиная с предположений.Скажем, таблица CALL_LOG выглядит так:

CallerId
Source
Destination
Duration
CallStartTime
CallStopTime

.,,и таблица TARRIFF выглядит следующим образом:

Id
RateType (Peak or OffPeak)
RateStartTime
RateStopTime
Rate

И давайте предположим, что вы используете Oracle, так как я не вижу, что конкретно упомянуто.Но вы говорите, CDR, так что, вероятно, много записей, так что, возможно, Oracle. (ПРИМЕЧАНИЕ. Я удалил специальный код Oracle и решил сделать это как внутреннее объединение. Возможно, это будет слишком медленно, в зависимости от объема.)

И давайте предположим, что определение«Пиковый вызов» - это вызов, который начинается в непиковое время, независимо от того, когда он заканчивается.(Обратите внимание, что это определение имеет решающее значение для правильной работы.)

Наконец, давайте предположим, что на основе ваших комментариев существует только две ставки: максимальная и непиковая.Это кажется странным, но хорошо.Я бы подумал, что время будет различаться по дням, чтобы учесть тарифы на выходные, но вы должны быть в состоянии экстраполировать.

Таким образом, стоимость звонка будет тогда

SELECT l.CallerId, 
       l.Source, 
       l.Destination, 
       l.Duration, 
       t.RateType, 
       l.Duration * t.Rate as Cost
FROM CALL_LOG l
  INNER JOIN TARRIF t
    ON l.CallStartTime BETWEEN t.RateStartTime and t.RateStopTime
...