これは比較的簡単に思えます(これは通常、何かが足りないことを意味します)。
仮定から始めます。CALL_LOGテーブルが次のようになっているとします。
CallerId
Source
Destination
Duration
CallStartTime
CallStopTime
。。。TARRIFFテーブルは次のようになります。
Id
RateType (Peak or OffPeak)
RateStartTime
RateStopTime
Rate
特に言及されていないので、Oracleを使用していると仮定しましょう。しかし、あなたはCDRと言っているので、おそらく多くのレコード、つまりOracleかもしれません。 (注:Oracle固有のコードを削除し、これを内部結合として実行することにしました。ボリュームによっては、遅すぎる可能性があります。)
また、「オフピークコール」の定義は、いつ終了するかに関係なく、オフピーク時に開始するコールであると想定します。(この定義は、正しく実行するために重要であることに注意してください。)
最後に、コメントに基づいて、ピークとオフピークの2つのレートしかないと仮定しましょう。それは奇妙に思えますが、大丈夫です。週末の料金を考慮して、時間は日によって異なると思いましたが、推定できるはずです。
したがって、通話の費用は次のようになります。
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