如何查询表以获取调用成本

时间:2011-04-12 14:10:08

标签: sql cdr

我需要用什么查询来计算mysql数据库中的调用成本?

我有两张桌子,一张是有通话时间的通话记录,另一张表是有峰值和非高峰率的关税表,高峰时间是08:00:00 - 19:00:00非高峰时间是19:00 :00 - 08:00:00峰值的速率是每分钟10便士或每秒0.9992或其他东西。 2分钟左右。

我想知道如何根据通话时长和通话费用 - 每秒/分钟的费率来查询两个表来计算通话费用。

输出将在另一个包含CallerId,来源,目的地,通话时长,通话费用

的表格上

1 个答案:

答案 0 :(得分:0)

这似乎相对简单(这通常意味着我遗漏了一些东西)。

从假设开始。假设CALL_LOG表如下所示:

CallerId
Source
Destination
Duration
CallStartTime
CallStopTime

。 。 。而TARRIFF表如下所示:

Id
RateType (Peak or OffPeak)
RateStartTime
RateStopTime
Rate

我们假设您使用的是Oracle,因为我没有看到具体提到的。但你说CDR,所以可能有很多记录,所以也许是甲骨文。 (注意:我删除了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