SQL仅选择存在最大值的行以及另一个链接表中的相应ID

SQL仅选择存在最大值的行以及另一个链接表中的相应ID,sql,ms-access-2007,Sql,Ms Access 2007,我有一个简单的零件数据库,我想用它来计算组件的成本,我需要保留成本历史记录,这样我就可以更新零件的成本,而不会影响历史数据 到目前为止,我的信息存储在两个表中: tblPart: PartID | PartName 1 | Foo 2 | Bar 3 | Foobar tblPartCostHistory PartCostHistoryID | PartID | Revision | Cost 1 | 1 | 1

我有一个简单的零件数据库,我想用它来计算组件的成本,我需要保留成本历史记录,这样我就可以更新零件的成本,而不会影响历史数据

到目前为止,我的信息存储在两个表中:

tblPart:

PartID | PartName
1      | Foo
2      | Bar
3      | Foobar
tblPartCostHistory

PartCostHistoryID | PartID | Revision | Cost
1                 | 1      | 1        | £1.00
2                 | 1      | 2        | £1.20
3                 | 2      | 1        | £3.00
4                 | 3      | 1        | £2.20
5                 | 3      | 2        | £2.05
我想要的是每个零件的PartID,以及修订号最高的PartCostHistoryID,因此:

PartID | PartCostHistoryID
1      | 2
2      | 3
3      | 5
我已经看了这里的一些其他线程,我不能完全理解它。我可以设法获得具有最高修订号的PartID,但是如果我尝试使用PartCostHistoryID执行任何操作,那么每个零件都会有多个PartCostHistoryID

我正在使用MS Access 2007

非常感谢。

这里是查询

select PartCostHistoryId, PartId from tblCost
where PartCostHistoryId in 
(select PartCostHistoryId from 
   (select * from tblCost as tbl order by Revision desc)  as tbl1
group by PartId
) 

下面是SQL FIDLE

Mihai非常简洁的回答,假设两者的顺序

[PartCostHistoryID]和

[修订]各[部分]

你总是在提升

不依赖于该假设的解决方案将是

选择 tblPartCostHistory.PartID, tblPartCostHistory.PartCostHistoryID 从…起 tblPartCostHistory 内连接 选择 党,, MAXRevision作为MaxOfreision 从tblPartCostHistory 分组 作为max 在max.PartID=tblPartCostHistory.PartID上 和max.MaxOfRevision=tblPartCostHistory.Revision
@马克:是的,我还用小提琴纠正了这个问题Fiddle显示该查询在MySQL中工作,但不幸的是,它在Access中不工作:您试图执行的查询不包括作为聚合函数一部分的指定表达式“PartCostHistoryId”。+1如果不按时间顺序输入成本修订,则此方法不会中断,或者当数据输入错误得到纠正以后。已经测试过这一点,它的工作非常完美。如前所述,Mihai的答案确实有效,但这是一种更有效的方法。非常感谢。
SELECT PartID,MAX(PartCostHistoryID) FROM table GROUP BY PartID