访问 - SQL查询 - >找到最近的记录并将其保存到表中

时间:2014-01-10 03:53:09

标签: sql ms-access

我确信之前已经问过这个问题,并且我发现了几个类似的东西。我无法弄清楚如何让它适合我。

我有一个包含数据的表(tblHistory

Unit NumberActionLoggerIDSensorIDCableIDDateData Location

我还有另一个包含更多数据的表(tblUnit

UnitLoggerSensorCable

我想创建一个查询来搜索tblHistory以查找每个单元的最新LoggerIDSensorIDCableID

要添加到此,可能需要在查询中保护,以防用户未放置记录器,传感器或电缆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

1 个答案:

答案 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会认为你正在尝试使用该函数而不是调用表中的字段。将来,总是尽量避免使用保留字作为字段名称,它会为您节省很多的头痛。