问题描述
另一个用户@ gordon-linoff帮助我创建了一个查询,以提取表中每个NoteDate
的最新OpportunityID
。我想扩展它以提供NotesUser
,它与其他两个元素在同一表中。
我的挑战是NotesUser
返回UserID
(是PK)而不是UserName
。
SELECT o.OpportunityID,n.NotesDate,n.NotesID,n.NotesUser
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;
产生此结果:
NotesUser
是一个名为tblUsers
的表的PK,该表包含两列。 ID
和UserName
这是我到目前为止获得的代码
SELECT o.OpportunityID,n.NotesUser,tblUsers.UserName
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) LEFT JOIN
(SELECT tblUsers.UserName
FROM tblUsers
WHERE n.NoteUser=tblusers.username)
ORDER BY o.OpportunityID;
更新:这是tblUsers的样子。
解决方法
如果我的理解正确,您只需添加一个LEFT JOIN
。无需子查询:
SELECT o.OpportunityID,n.NotesDate,n.NotesID,n.NotesUser,u.username
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
) LEFT JOIN
tblUsers as u
ON n.NoteUser = u.id
ORDER BY o.OpportunityID;