Anda memiliki dua opsi untuk mendapatkan produk di SQL Server.
1. Simulasikan menggunakan log dan eksponen:
create table returns
(
returnDate date,
returnValue float
)
insert into returns values('05/31/06', -0.002271835)
insert into returns values('06/30/06', -0.001095986)
insert into returns values('07/31/06', 0.006984908)
insert into returns values('08/31/06', 0.014865360)
insert into returns values('09/30/06', 0.008938896)
select totalReturn = power
(
cast(10.0 as float)
, sum(log10(returnValue + 1.0))
) - 1
from returns;
with tr as
(
select totalReturn = power
(
cast(10.0 as float)
, sum(log10(returnValue + 1.0))
) - 1
, months = cast(count(1) as float)
from returns
)
select annualized = power(totalReturn + 1, (1.0 / (months / 12.0))) - 1
from tr;
Ini memanfaatkan log dan eksponen untuk mensimulasikan perhitungan produk. Info lebih lanjut:Fungsi yang ditentukan pengguna .
Satu-satunya masalah di sini adalah bahwa itu akan gagal untuk pengembalian <-100%. Jika Anda tidak mengharapkan ini, tidak apa-apa, jika tidak, Anda harus menetapkan nilai apa pun <100% hingga -100%.
Anda kemudian dapat menggunakan pengembalian aktual ini untuk mendapatkan pengembalian tahunan sesuai kebutuhan.
2. Tentukan agregat khusus dengan CLR:
Lihat Buku Online .
Anda dapat membuat fungsi kustom CLR dan kemudian menautkan ini sebagai agregat untuk digunakan dalam kueri Anda. Ini lebih banyak pekerjaan dan Anda harus mengaktifkan CLR di server Anda, tetapi setelah selesai, Anda dapat menggunakannya sebanyak yang diperlukan.