如何使用SQL查询计算通话费用

时间:2011-04-12 23:28:29

标签: mysql sql billing

有没有人知道如何从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 个答案:

答案 0 :(得分:1)

您应该通过在关税表中插入更多数据来简化您的生活:

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小时?

您还应该翻译您使用的字词。例如,您请求:

  

具有来电,来电,目的地,通话时长,资费和通话费用

  • 来电者ID⟶clid
  • 来源⟶src
  • 目的地⟶dst
  • 通话时长⟶duration
  • 关税⟶ratecharged

用什么单位来衡量通话时长?充电制度只是呼叫开始时应用的速率,所以有人在07:59:59呼叫12小时以夜间通话吗?通话时长与结算秒数有何不同?计算应该使用计费秒吗?

您可能还想查看与此问题非常类似的上一个问题: