选择一对多关系中的最后一条记录

Posted

技术标签:

【中文标题】选择一对多关系中的最后一条记录【英文标题】:Select last record in one-to-many relationship 【发布时间】:2019-01-23 08:27:15 【问题描述】:

我正在使用 ms-access 并且我有 2 个表 tblAssets 和 tblauditlog 我正在尝试获取所有资产的最后审计日志,这些资产的资产状态 = 6,这意味着它们已被出售。这两个表之间的关系是 tblassets.assetid = tblauditlog.logaspectid ,我只获得了已售出资产的所有审计日志,但我正在寻找最后一条记录。我有一个日期字段,但是当我使用 Max(tblauditlog.logtimestamp) 时会引发错误

我试过了

SELECT <br>
r.assetid, <br>
r.assetcategory, <br>
r.assetstatus, <br>
sub2.logmessage, <br>
sub2.logtimestamp <br>
FROM <br>
     tblAssets as r <br>
LEFT JOIN <br> <br>
 (SELECT <br>
     sub1.logaspectid, <br>
     a2.logMessage, <br>
     a2.logtimestamp <br>
 FROM  <br>
       ( <br>
        SELECT <br>
         a1.logaspectid, <br>
         Max(a1,logtimestamp) AS MaxOfTimeStamp <br>
         FROM tblauditlog AS a1  <br>
         GROUP BY a1.logaspectid ) AS sub1  <br>
       INNER JOIN tblauditlog as a2  <br>
 ON  <br>
     (sub1.MaxOfTimeStamp = a2.logTimestamp) AND (sub1.logaspectid = a2.logaspectid)) AS sub2 <br>
ON r.assetid = sub2.logaspectid ;

上面给了我一个错误:

无法执行查询。使用多值的无效操作或语法 字段

这就是我返回的多条记录

SELECT tblAssets.assetID, tblAssets.assetCategory, tblAssets.assetModel,
       tblAssets.assetStatus, tblAuditLog.logAspectID, tblAuditLog.logMessage,
       tblAuditLog.logTimeStamp
FROM tblAssets
    LEFT JOIN tblAuditLog ON tblAssets.assetID = tblAuditLog.logAspectID
WHERE (((tblAssets.assetStatus)=6)
   AND ((tblAuditLog.logTimeStamp)>=#1/1/2017#));  

我只想要所有已售出的资产状态 = 6 的最后记录日志。

【问题讨论】:

编辑问题以提供样本原始数据和所需的输出。也许您应该探索 TOP N 查询。 allenbrowne.com/subquery-01.html#TopN 【参考方案1】:

如果我理解正确,您可以使用关联子查询来获取最新的审计日志记录。然后您可以检查这是否具有您想要的状态:

SELECT . . .
FROM tblAssets as a INNER JOIN
     tblauditlog as al
     ON a.assetid = al.logaspectid
WHERE al.logtimestamp = (SELECT MAX(al2.logtimestamp)
                         FROM tblauditlog as al2
                         WHERE al2.logaspectid = al.logaspectid
                        ) AND
      al.assetstatus = 6 ;

【讨论】:

以上是关于选择一对多关系中的最后一条记录的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 以一对多关系获取最后一条记录

在 Core Data 中有效地获取一对多关系中的最新记录

Razor Pages - 一对多关系

数据库表与表之间的一对一对多多对多关系

在 SQL 连接语句中选择一对多关系中最匹配的记录

sql 一对多关系随机查一条