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

Access-SQL查询->;查找最近的记录并将其保存到表中,sql,ms-access,Sql,Ms Access,我相信以前有人问过这个问题,我也发现了一些类似的问题。我就是不知道如何让它为我工作 我有一个包含数据的表(tblHistory) 装置编号,动作,日志ID,传感器ID,电缆ID,日期,数据位置等 我还有另一个表(tblUnit)包含更多数据 装置,记录器,传感器,电缆 我想创建一个查询,搜索TBL历史,以查找每个单元的最新日志ID、传感器ID和电缆ID 此外,如果用户未放置记录器、传感器或电缆ID,则可能需要在查询中提供保护措施,以便它不只是查找最近的日期并返回空值 最后一个可能简单也可能不简单

我相信以前有人问过这个问题,我也发现了一些类似的问题。我就是不知道如何让它为我工作

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

装置编号
动作
日志ID
传感器ID
电缆ID
日期
数据位置

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

装置
记录器
传感器
电缆

我想创建一个查询,搜索TBL历史,以查找每个单元的最新
日志ID
传感器ID
电缆ID

此外,如果用户未放置记录器、传感器或电缆ID,则可能需要在查询中提供保护措施,以便它不只是查找最近的日期并返回空值

最后一个可能简单也可能不简单的方面是,我希望它覆盖tblUnit表中的数据,以便当新的记录器、传感器或电缆就位时,装置使用这些新数据。我不想编辑这些字段,因为我想保留它的历史记录。我对SQL和Access的了解非常有限,因为我通常更熟悉excel和vb

我试过使用这些: 但是作为一个初学者,我不能100%确定如何将它们应用到我的问题中

如果有人能帮忙,那就太好了

示例:(TBL历史)

特布伦特

Unit Number,Logger,SensorID,Cable
1,KTSM01FM01,KTSM01S01,sa123123
2,Logger1,Sensor1,Cable1

必须将名为Date的字段括起来,因为Date()是一个保留函数,Access会认为您试图使用该函数,而不是调用表中的字段。以后,请尽量避免使用保留字作为字段名,这样可以为您省去很多麻烦。

谢谢,它显示的单元号、记录器ID、传感器ID几乎与我预期的一样。我已经将日期类别改为ActionDate,这样问题就被删除了,我不得不在单元号周围加上括号,因为它是两个单词。这一部分工作正常,但它没有选择前1项。谢谢你的帮助,你能创建两个有足够记录的模拟表吗?这样当查询运行时,你就可以确定它运行正常,然后编辑你的原始帖子以包含数据?在没有数据的情况下处理代码以确保其正常工作非常困难。我创建了两个模拟表。基本上,我希望从tblHistory的每个变化中挑选最新的,然后在tblUnit中更新它。我首先为记录器、传感器和电缆创建一个查询以按日期排序,然后创建另一个查询以引用该查询来选择每个查询中的第一个。现在我只需要想办法更新原始数据。它应该可以工作,但缺乏优雅。我更新了查询语法。这将为您提供最新的记录,但如果存在,将返回null。您可能需要添加WHERE子句,以便在其中包含空值时不会返回记录,如果您希望这样做的话。谢谢您的帮助。我需要做一些额外的调整,但我需要自己学习这些。非常感谢你的帮助。
Unit Number,Logger,SensorID,Cable
1,KTSM01FM01,KTSM01S01,sa123123
2,Logger1,Sensor1,Cable1
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