我有一张从银行网站下载的外汇汇率表。只有银行 在工作日提供外汇汇率,我想创建一个表格,记录1月份每天的汇率。例如,10月1日的汇率应该与1月8日的汇率相同,因为10日是周末,8日是最近的工作日。
如何在Access中创建一个查询,该查询将创建一个具有31行(1月份每天1个)且具有正确汇率的新表?
源数据表示例如下所示:
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
答案 0 :(得分:0)
我不认为只有查询才能在Access中执行此操作。您可以通过创建包含1月份所有日期的表来解决此问题。如果您在该表中放置第二个日期字段,其中包含星期六和星期日的星期五日期,您可以轻松地加入这两个表格,从而产生您想要的结果(当然不会认可其他银行假日)。
如果您也想要这样,我建议您使用以下查询来填充表格中的第二个日期字段:
UPDATE Days SET LinkDate = (SELECT MAX(Date) FROM [FX Rate] WHERE [FX Rate].Date <= Days.Date);
答案 1 :(得分:0)
您可以使用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;