編集: さらに簡素化し、< vs <= エラーを修正しました。
浮動小数点はなく、私がアクセスできるすべてのデータベースで動作しました:
create table calls (t1 int, t2 int, rct int, cd int)
insert into calls (t1, t2, rct, cd)
values (60, 10, 48, 60)
insert into calls (t1, t2, rct, cd)
values (60, 10, 65, 70)
insert into calls (t1, t2, rct, cd)
values (60, 10, 121, 130)
insert into calls (t1, t2, rct, cd)
values (30, 20, 25, 30)
insert into calls (t1, t2, rct, cd)
values (30, 20, 35, 50)
insert into calls (t1, t2, rct, cd)
values (30, 20, 65, 70)
--Additional test to show that it works
insert into calls (t1, t2, rct, cd)
values (60, 10, 70, 70)
select t1, t2, rct, cd,
t1 + case when rct <= t1
then 0
else ( (rct-1-t1) / t2 + 1) * t2 end as CalceCD
from calls
結果:
t1 t2 rct cd CalceCD
----------- ----------- ----------- ----------- ------ -----
60 10 48 60 60
60 10 65 70 70
60 10 121 130 130
30 20 25 30 30
30 20 35 50 50
30 20 65 70 70
60 10 70 70 70
(影響を受ける 6 行)
関数をUDFとして自由に作成するか、SQL環境で選択をクリーンアップできるものなら何でも作成できます。
編集:はい、フロアとオフセットが1の場合、浮動計算が回避されます。