sql - 访问 - LEFT JOIN 仅查询最近的记录
问题描述
我正在尝试构建一个 LEFT JOIN 查询,其中查询的“右侧”只是与“左侧”的 PK 相关的最新记录。
查询的左侧来自一个名为 的表Oppportunity
。这张桌子的PK是OpportunityID
。
查询的右侧来自一个名为tblNotes
包含NotesID
作为其 PK 和NotesDate
作为其数据字段之一的表。 tblNotes
还包含OpportunityID
作为 FK。
这是我的 SQL:
SELECT Opportunity.OpportunityID, tblNotes.NotesDate, tblNotes.NotesID
FROM Opportunity LEFT JOIN tblNotes ON Opportunity.OpportunityID = tblNotes.opportunityid
ORDER BY Opportunity.OpportunityID;
结果如下:
这是我需要的,包括空字段。
根据我在另一篇文章中获得的帮助,我知道我可以NoteID
为每个OpportunityID
. 这是我尝试过的。
SELECT Opportunity.OpportunityID, tblNotes.NotesDate, tblNotes.NotesID
FROM Opportunity LEFT JOIN tblNotes ON Opportunity.OpportunityID = tblNotes.opportunityid INNER JOIN
(SELECT n.NotesID
FROM tblNotes AS n
WHERE n.notesId = (select top 1 n2.notesId FROM tblNotes as n2
)
ORDER BY Opportunity.OpportunityID;
非常感谢社区可以提供的任何帮助。我非常擅长 Excel,但 Access 对我来说非常陌生。
解决方案
您可以在ing之前先获取最新的行:join
SELECT o.OpportunityID, n.NotesDate, n.NotesID
FROM Opportunity as o LEFT JOIN
(SELECT n.*
FROM tblNotes as n
WHERE n.NotesDate = (SELECT MAX(n2.NotesDate)
FROM tblNotes as n2
WHERE n2.OpportunityID = n.OpportunityID
)
) as n
ON o.OpportunityID = n.opportunityid
ORDER BY o.OpportunityID;
推荐阅读
- javascript - 如何获得具有特定序列的数组组合?
- spring-boot - Spring Boot getbean vs autowired
- java - 如何显示由 BigDecimal 实例化的确切值
- oauth-2.0 - {"error":"invalid_request","error_description":"Missing parameter: username"} 在 Keycloak Google Social 登录
- c - '\0' 结尾的 C 字符串
- elasticsearch - Elasticsearch 将动态映射的位置数据重新索引到 geoshape
- javascript - 如何在 IE 11 中创建一个空的文件对象
- c# - 将数据从 WebMethod 返回到 ajax
- asp.net - .NET 通过 Microsoft Jet 引擎访问受感染的 Excel 文件(带有勒索软件),这会影响或感染服务器吗?
- javascript - Bcrypt.compare 不在 chai/mocha 测试中执行,而是在代码中执行