0

有没有人知道如何从 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);

我想将呼叫成本的输出制成一个新表,其中包含呼叫者 ID、来源、目的地、呼叫持续时间、资费和呼叫成本。

我还应该创建另一个包含用户列表的表吗?以及如何在周末向非高峰期收费?

4

1 回答 1

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

您还应该翻译您使用的术语。例如,您要求:

带有 callerid、来源、目的地、通话时长、资费和通话费用

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

用什么单位来衡量通话时长?收费制度是否只是通话开始时适用的费率,所以有人在 07:59:59 通话 12 小时后可以按夜间费率通话?通话时长与计费秒数有何不同?计算是否应该使用计费秒数?

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

于 2011-04-13T05:24:50.700 回答