选择一对多关系中的最后一条记录
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 ;
【讨论】:
以上是关于选择一对多关系中的最后一条记录的主要内容,如果未能解决你的问题,请参考以下文章