基本的に、私は3つのテーブルを持っています:
- cdr、フィールド
dst
(destination)、billsec
(duration)、およびcalldate
code
(国コード)、およびcost
(1分あたり)を含むIntlrates 。- およびエリアコード。これには、、、およびが含まれます。
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
(ニューヨーク)の両方が合計に追加されます。最初のものは問題ありませんが、2番目のものはそうではないときに合計に追加されます。
これを回避するために、次の行に沿って何かに結合するための2番目の条件を変更する方法はありますか?
`Code` = SUBSTR(dst, 2, 3) AND SUBSTR(dst, 2, 3) != areacode.areacode
基本的に、コードが一致し、コードが国別エリアコードテーブルにない場合にのみ結合するように作成します。
結合を使用してこれを行う方法があると思います(またはおそらく存在します)が、データベースに関してはひどく不十分であり、それをどのように実装するかについてはまったくわかりません。あなたが必要とするより多くの情報があるならば申し訳ありません/この質問は無意味です。