我有這樣的表,只有兩列,每個記錄存儲在給定月份的利率:MySQL的計算查詢
id rate
===========
199502 3.63
199503 2.60
199504 4.26
199505 4.25
... ...
201704 0.79
201705 0.93
201706 0.81
201707 0.80
201708 0.14
在此基礎上的價格,我需要創造積累率,相似的結構的另一個表,其數據被計算爲YYYYMM(月/年)參數,這樣的函數(在該式是法律上強制性):
- 給定的參數月有總是速率的0(零)
- 的一個月之前有alwa ys率爲1(一)
- 前幾個月的費率將爲(一)加上給定月份與月份之間月份費率之和作爲參數。
我會澄清這個規則,這個例子中,給出的參數201708
:
SOURCE CALCULATED
id rate id rate
=========== =============
199502 3.63 199502 360.97 (1 + sum(rate(199503) to rate(201707)))
199503 2.60 199503 358.37 (1 + sum(rate(199504) to rate(201707)))
199504 4.26 199504 354.11 (1 + sum(rate(199505) to rate(201707)))
199505 4.25 199505 349.86 (1 + sum(rate(199506) to rate(201707)))
... ... ... ...
201704 0.79 201704 3.54 (1 + rate(201705) + rate(201706) + rate(201707))
201705 0.93 201705 2.61 (1 + rate(201706) + rate(201707))
201706 0.81 201706 1.80 (1 + rate(201707))
201707 0.80 201707 1.00 (per definition)
201708 0.14 201708 0.00 (per definition)
現在我已經實現了一個VB.NET函數讀取源表並生成計算表,但
Public Function AccumRates(targetDate As Date) As DataTable
Dim dtTarget = Rates.Clone
Dim targetId = targetDate.ToString("yyyyMM")
Dim targetIdAnt = targetDate.AddMonths(-1).ToString("yyyyMM")
For Each dr In Rates.Select("id<=" & targetId & " and id>199412")
If dr("id") = targetId Then
dtTarget.Rows.Add(dr("id"), 0)
ElseIf dr("id") = targetIdAnt Then
dtTarget.Rows.Add(dr("id"), 1)
Else
Dim intermediates =
Rates.Select("id>" & dr("id") & " and id<" & targetId).Select(
Function(ldr) New With {
.id = ldr.Field(Of Integer)("id"),
.rate = ldr.Field(Of Decimal)("rate")}
).ToArray
dtTarget.Rows.Add(
dr("id"),
1 + intermediates.Sum(
Function(i) i.rate))
End If
Next
Return dtTarget
End Function
我的問題是我怎麼可以把這個作爲我的數據庫查詢,因此它可以被其他動態查詢使用將使用這些積累率:這是在運行在每臺客戶機完成s更新債務到任何給定的日期。
非常感謝!
編輯
我設法讓返回我想要的數據的查詢,現在我只是不知道如何封裝,以便它可以從傳遞任何id
作爲參數(另一查詢被稱爲在這裏我做到了使用SET ...
聲明):
SET @targetId=201708;
SELECT
id AS id_acum,
COALESCE(1 + (SELECT
SUM(taxa)
FROM
tableSelic AS ts
WHERE
id > id_acum AND id < @targetId
LIMIT 1),
IF(id >= @targetId, 0, 1)) AS acum
FROM
tableSelic
WHERE id>199412;
那是因爲我很新到MySQL,我已經習慣了MS-訪問,其中參數化查詢非常straightfoward創建。
給定參數201708 ..爲什麼201706比例不是1.94? '1 + 0.80 + 0.14' –
當前月份不完整,其匯率不計入累計匯率。法律的東西。 – VBobCat
好的,那麼規則3應該寫成不同,以使其清楚不包含參數。 –