Access - LEFT JOIN 仅查询最近的记录

Access - LEFT JOIN Query Most Recent Record Only

我正在尝试构造一个 LEFT JOIN 查询,其中查询的“右侧”只是与“左侧”PK 相关的最新记录。

查询的左侧来自一个名为 Oppportunity 的 table。这个table的PK是OpportunityID.

查询的右侧来自名为 tblNotes 的 table,其中包含 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;

结果如下:

这是我需要的,包括空白字段。

根据我在另一个 post 中获得的帮助,我知道我可以为每个 OpportunityID 使用 MAX NoteID。这是我尝试过的。

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 对我来说还是个新手。

您可以获得最近的行 first before joining:

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;

我想你想要下面的逻辑。这个想法是在 left join 中添加一个条件,该条件使用相关子查询来过滤每个 OpportunityID

的最新 NotesDate
SELECT o.OpportunityID, n.NotesDate, n.NotesID
FROM Opportunity AS o
LEFT JOIN tblNotes AS n 
    ON  n.OpportunityID = o.OpportunityID
    AND n.NotesDate = (
        SELECT MAX(n1.NotesDate)
        FROM tblNotes n1
        WHERE n1.OpportunityID = o.OpportunityID
    )
ORDER BY o.OpportunityID;