我需要像这样做一个左外连接:
SELECT
tblProjects.*,
tblNotes.NoteID,
tblNotes.regDate AS lastUpdatedNote
FROM
tblProjects
LEFT OUTER JOIN tblNotes ON tblProjects.ProjectID = tblNotes.ProjectID
但是一个项目可以有几个注释,在这种情况下我只对MAX(regDate)的一个感兴趣如何将这个条件添加到上面的sql?或者我是否必须获取每个项目的所有注释并过滤掉最新的代码?
所以我只希望每个项目有一行,在那行中我想要lastUpdatedNote信息。
Thx:)
答案 0 :(得分:2)
在MS SQL中,您可以执行以下操作:
SELECT
tblProjects.*,
tblNotes.NoteID,
tblNotes.regDate AS lastUpdatedNote
FROM tblProjects
OUTER APPLY
(
SELECT TOP 1 NoteId, regDate
FROM tblNotes
WHERE tblProjects.ProjectID = tblNotes.ProjectID
ORDER BY tblNotes.regDate DESC
) tblNotes
如果您只需要那些有笔记的项目,请替换为CROSS APPLY
。
或与CTE:
WITH cte
AS
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY NoteId ORDER BY RegDate DESC) RowNumber
FROM tblNotes
)
SELECT tblProjects.*, cte.NoteID, cte.RegDate
FROM tblProjects
LEFT JOIN cte on
tblProjects .ProjectId = cte.ProjectId AND RowNumber = 1
如果您只需要那些有笔记的项目,请替换为INNER JOIN
。