我确信之前已经问过这个问题,并且我发现了几个类似的东西。我无法弄清楚如何让它适合我。
我有一个包含数据的表(tblHistory
)
Unit Number
,Action
,LoggerID
,SensorID
,CableID
,Date
,Data Location
等
我还有另一个包含更多数据的表(tblUnit
)
Unit
,Logger
,Sensor
,Cable
我想创建一个查询来搜索tblHistory以查找每个单元的最新LoggerID
,SensorID
和CableID
。
要添加到此,可能需要在查询中保护,以防用户未放置记录器,传感器或电缆ID,以便它不仅仅找到最近的日期并返回空值。
这可能是也可能不简单的最后一个方面是我希望这会覆盖tblUnit表中的数据,这样当新的记录器,传感器或电缆到位时,该单元就会使用这个新数据。我不希望这些字段被编辑,因为我想保留它的历史记录。我对SQL和Access的了解非常有限,因为我通常对excel和vb更熟悉。
我尝试过使用这些: MSAccess: select N records from each category sql for finding most recent record in a group 但作为初学者,我并不是100%确定如何将它们应用到我的问题中。
如果有人能提供帮助那就太棒了。
示例:(tblHistory)
Unit Number,Action,LoggerID,SensorID,CableID,ActionDate
1,Replace Sensor,,KTSM01S03,,15/02/2015
1,Replace Logger,KTSM01FM02,,,11/01/2014
1,Replace Cable,,,sa123124,10/01/2014
1,Replace Logger,KTSM01FM03,,,12/01/2014
2,Replace Sensor,,KTSM01S01,,13/01/2014
2,Replace Cable,,,sa123123,12/01/2014
2,Replace Cable,,,sa123124,16/02/2014
2,Replace Logger,KTSM01FM01,,,13/01/2014
tblUnit
Unit Number,Logger,SensorID,Cable
1,KTSM01FM01,KTSM01S01,sa123123
2,Logger1,Sensor1,Cable1
答案 0 :(得分:0)
SELECT TOP 1 *
FROM tblHistory a
INNER JOIN
(SELECT Unit Number, Max([Date]) as MaxDate
FROM tblHistory
GROUP BY Unit Number) b
on a.[Unit Number] = b.[Unit Number]
and a.[Date] = b.MaxDate
你必须括起名为Date的字段,因为Date()是一个保留函数,Access会认为你正在尝试使用该函数而不是调用表中的字段。将来,总是尽量避免使用保留字作为字段名称,它会为您节省很多的头痛。