SQL仅选择存在最大值的行以及另一个链接表中的相应ID
我有一个简单的零件数据库,我想用它来计算组件的成本,我需要保留成本历史记录,这样我就可以更新零件的成本,而不会影响历史数据 到目前为止,我的信息存储在两个表中: tblPart: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
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 FIDLEMihai非常简洁的回答,假设两者的顺序 [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