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 join
ing:
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;
我正在尝试构造一个 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 join
ing:
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;