我有一个包含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
答案 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
);