首页 > 解决方案 > 访问 - 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 对我来说非常陌生。

标签: sqldatetimems-accessleft-joingreatest-n-per-group

解决方案


您可以在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;

推荐阅读