基本上,我有三个表:
- cdr,其中包含字段
dst
(destination)、billsec
(duration) 和calldate
- Intlrates,其中包含
code
(国家代码)和cost
(每分钟)。 - 和areacode,其中包含
areacode
、state
和city
。
目前我有一个声明,增加了调用每个代码的总成本,如下:
SELECT
mapgtalkexten.Intlrates.`Code`,
sum(mapgtalkexten.Intlrates.Cost * (cdr.billsec/60)) as totals
FROM
cdr JOIN mapgtalkexten.Intlrates ON
((`Code` = SUBSTRING(dst, 4, 3) or `Code` = SUBSTR(dst, 4, 2))
and dst like "011%")
--The above limits the join to only calls where the destination phone number
--requires the exit code (011) and the country code is 2 or 3 digits
or (`Code` = SUBSTR(dst, 2, 3) and dst like "1%")
--The above was written to also join countries where the NANP format was used
--(i.e. +1787 for Puerto Rico.)
WHERE
cdr.calldate like "2012-11%"
and billsec >0
GROUP BY
mapgtalkexten.Intlrates.`Code`
输出示例:
Code | totals
--------------
212 | 2.035
240 | 170.76
352 | 2.268
49 | 0.45
现在,我的问题是:该Intlrates
表在 NANP 和非 NANP 代码之间没有区别。这意味着在我的加入中,两者:
011212
(摩洛哥)和1212
(纽约)都被添加到总数中。第一个很好,第二个不应该增加总数。
为了避免这种情况,有没有办法将连接的第二个条件修改为以下内容:
`Code` = SUBSTR(dst, 2, 3) AND SUBSTR(dst, 2, 3) != areacode.areacode
基本上使它只有在代码匹配并且代码不在国家区号表中时才会加入。
我认为有一种方法可以通过连接(或者可能存在)来做到这一点,但是在数据库方面我非常不适应,并且完全不知道我将如何去实现它。抱歉,如果您需要更多信息/这个问题是荒谬的。