Обобщаващи продукти
Примерни данни
Просто дефинирайте таблица, данни само с години, месеци и интерес.
-- テーブル定義
declare @利息マスタ table
(
年月 nvarchar(6)
,利息 decimal(4, 2)
)
-- サンプルデータ挿入
insert @利息マスタ
select N'201501', 1.05
union all select N'201502', 1.03
union all select N'201503', 1.02
union all select N'201504', 1.10
union all select N'201505', 1.02
union all select N'201506', 1.06
union all select N'201507', 1.07
union all select N'201508', 1.04
union all select N'201509', 1.06
union all select N'201510', 1.07
union all select N'201511', 1.03
union all select N'201512', 1.02
-- 確認
select * from @利息マスタ
Агрегиране на продукти
Агрегирането на продукта може да се получи чрез сумиране на "експоненцеална функция" и "логаритмична функция". SQL изглежда така:
-- 集計
select exp(sum(log([利息]))) from @利息マスタ
-- 結果:1.73968081491318
Това е форма, която може да бъде реализирана от естеството на "експонециалната функция" и "логаритмичната функция".
Първо, обобщението на логаритмичната функция е "log x + log y = log(x * y)" по формулата. Експонентиалната формула "e logx = x**" дава "e log(x*y) = x * y" чрез прилагане на формулата, получена чрез сумата на логаритмичните функции. (x * y * ... (Частта от е броят на данните)
Нулева и отрицателна кореспонденция
Тъй като логаритмична функция не може да бъде по-малка или равна на 0, възниква грешка, ако целта за обобщаване съдържа число, по-малко или равно на 0. За да поберете номера под 0, използвайте SQL, както следва:
-- 集計(ゼロ、負対応)
select
case
when min(abs([利息])) = 0 then 0
else
exp(sum(log(abs(nullif([利息], 0)))))
* round(0.5 - count(nullif(sign(sign([利息]) + 0.5), 1)) % 2, 0)
end as [利息合計]
from @利息マスタ
-- 結果:1.73968081491318