【发布时间】:2020-04-10 08:20:35
【问题描述】:
我有一个在特定日期 (RatingDate) 应用的公司 (CoID) 评级 (Rating) 列表。
评级日期是零星的,我希望通过将给定评级分配给日期列表中的特定日期来填补空白。
如果评级在给定的 RatingDate 发生变化,新的评级将在更改后的日期结转。
我的代码会继承最旧的评分,并且如果评分在特定日期发生变化,则不会更改。
Public Function PopulateTableOfRatingHistory()
Dim dbs As DAO.Database
Set dbs = CurrentDb
Dim dtDate As Date 'snapshot date
Dim sqlAppend As String
Dim sqlQueryLastRating As String
Dim qdf As DAO.QueryDef
Dim rs1 As DAO.Recordset
Set rs1 = dbs.OpenRecordset("DATES") 'check this to make sure it imports the table values
DoCmd.SetWarnings False
rs1.MoveFirst
Do While Not rs1.EOF
'get the date value to use as a parameter
dtDate = rs1.Fields(1).Value ' get the date value to lookup
'use the date parameter to run the SQL for the last rating as of the given date and append the query result to a table
DoCmd.RunSQL "INSERT INTO tblCoDtRtgs (ISIN, CoID, SnapDate, Rating, RatingDate ) SELECT RatingsBackDated.ISIN, RatingsBackDated.CoID, #" & dtDate & "#, Last(RatingsBackDated.Rating) AS LastOfRating, Last(RatingsBackDated.Date) AS LastOfDate " & _
"FROM RatingsBackDated " & _
"WHERE (((RatingsBackDated.Date)<= #" & dtDate & "#)) " & _
"GROUP BY RatingsBackDated.name, RatingsBackDated.CoID, RatingsBackDated.ISIN;"
rs1.MoveNext
Loop
rs1.Close
Set rs1 = Nothing
Set dbs = Nothing
DoCmd.SetWarnings True
End Function
【问题讨论】:
-
编辑问题以显示示例数据和所需结果 - 作为文本表格,而不是图像。
-
聚合函数 First 和 Last 在没有定义排序顺序的情况下是不可靠的。评论support.office.com/en-us/article/…
-
日期和名称是保留字,实际上不应该使用保留字作为任何东西的名称。