如何在特定日期之前在Access中查找最新条目

时间:2016-02-03 09:43:52

标签: ms-access-2010

我有一张从银行网站下载的外汇汇率表。只有银行 在工作日提供外汇汇率,我想创建一个表格,记录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    

2 个答案:

答案 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;