我有一个从银行网站下载的汇率表。银行只提供工作日的汇率,我想创建一个表,捕获一月份的每一天的汇率。因此,例如,1月10日的汇率应该与1月8日的汇率相同,因为10号是周末,8号是最近的工作日。
如何在Access中创建一个查询,该查询将创建一个新表,其中包含31行(1月份每天1行)和正确的FX汇率?
源数据表示例如下:
Date Currency rate
1/01/2016 USD/AUD 0.73
4/01/2016 USD/AUD 0.72
5/01/2016 USD/AUD 0.72
6/01/2016 USD/AUD 0.71
7/01/2016 USD/AUD 0.70
8/01/2016 USD/AUD 0.70
11/01/2016 USD/AUD 0.70 发布于 2016-02-03 19:19:02
我不认为在Access中仅通过查询就可以做到这一点。您可以通过创建一个包含一月份所有日期的表来解决此问题。如果您在该表中添加第二个日期字段,其中包含星期六和星期日的星期五的日期,则可以轻松地将这两个表连接起来,从而产生您想要的结果(当然,不需要承认其他银行假日)。
如果您也想这样做,我建议使用下面这样的查询来用所有日期填充表中的第二个日期字段:
UPDATE Days SET LinkDate = (SELECT MAX(Date) FROM [FX Rate] WHERE [FX Rate].Date <= Days.Date);发布于 2016-02-03 22:33:07
您可以使用DLookup:
SELECT
DateAdd("d", [Ten].[N]+10*[Ten_1].[N], #1/1/2016#) AS [Date],
DLookUp("rate", "FxTable", "[Date] = (Select Max([Date]) From FxTable Where FxTable.Date <= #" & Format(DateAdd("d", [Ten].[N]+10*[Ten_1].[N], #1/1/2016#), "yyyy\/mm\/dd") & "#)") AS DailyRate
FROM
Ten,
Ten AS Ten_1
WHERE
DateAdd("d",[Ten].[N]+10*[Ten_1].[N],#1/1/2016#) < #2/1/2016#);当月:
SELECT
DateSerial(Year(Date()), Month(Date()), [Ten].[N] + 10 * [Ten_1].[N] + 1) AS [Date],
DLookUp("rate", "FxTable", "[Date] = (Select Max([Date]) From FxTable Where FxTable.Date <= #" & Format(DateSerial(Year(Date()), Month(Date()), [Ten].[N] + 10 * [Ten_1].[N] + 1), "yyyy\/mm\/dd") & "#)") AS DailyRate
FROM
Ten,
Ten AS Ten_1
WHERE
DateSerial(Year(Date()), Month(Date()), [Ten].[N] + 10 * [Ten_1].[N] + 1) < DateSerial(Year(Date()), Month(Date()) + 1, 1);查询Ten是一个保存的查询:
SELECT DISTINCT
Abs([id] Mod 10) AS N
FROM
MsysObjects;https://stackoverflow.com/questions/35173403
复制相似问题