MS Access查询仅选择最新日期

时间:2016-06-13 23:32:45

标签: ms-access ms-access-2010

我有一个包含2个表的数据库,我正在尝试构建一个简单的查询来返回每个项目的最新成本。

样品:

  

ID,名称,成本,生效日期

     

1 ...的Item1 ... 5 ... 16年7月1日

     

2 ...的Item1 ... 4 ... 16年6月1日

     

3 ... ...项目2 6 ... 16年8月1日

     

4 ...的Item1 ... 2 ... 16年9月1日

只应返回第3行(第2项)和第4行(最近第1项和第3项)。

使用Access界面,只有在我根本不包含费用的情况下,我才设法让它工作,而且我无法从GROUP BY行中删除费用出。任何帮助表示赞赏!

SQL视图:

SELECT Item.Item_ID, Item.Item_Name, Rate_Changes.Cost, Max(Rate_Changes.Effective_Date) As MaxOfEffective_Date
FROM Item INNER JOIN Rate_Changes ON Item.Item_ID = Rate_Changes.Item_ID
WHERE Item.Active=True
GROUP BY Item.Item_ID, Item.Active, Item.Item_Name,
Rate_Changes.Cost, Rate_Changes.Effective_Date

1 个答案:

答案 0 :(得分:1)

这是一种方法:

SELECT i.Item_ID, i.Item_Name, rc.Cost, rc.Effective_Date
FROM Item as i INNER JOIN
     Rate_Changes as rc
     ON i.Item_ID = rc.Item_ID
WHERE i.Active = True AND
      rc.Effective_Date = (SELECT MAX(rc2.Effective_Date)
                           FROM Rate_Changes as rc2
                           WHERE rc2.Item_Id = i.Item_id
                          );

这假定给定项目没有重复的生效日期。

编辑:

如果你有重复项,你可以这样做:

SELECT i.Item_ID, i.Item_Name, rc.Cost, rc.Effective_Date
FROM Item as i INNER JOIN
     Rate_Changes as rc
     ON i.Item_ID = rc.Item_ID
WHERE i.Active = True AND
      rc.Effective_Date = (SELECT TOP 1 rc2.Effective_Date
                           FROM Rate_Changes as rc2
                           WHERE rc2.Item_Id = i.Item_id
                           ORDER BY rc2.Effective_Date DESC, rc2.id DESC
                          );