你可以嘗試這樣的事情,使用CTE(公共表表達式)和ROW_NUMBER()
功能:
;WITH CTE AS
(
SELECT
m.MessageId, m.MessageText, m.PostedDate,
CommentDate = ISNULL(c.CommentDate, '19000101'),
RowNum = ROW_NUMBER() OVER (PARTITION BY m.MessageID
ORDER BY ISNULL(c.CommentDate, '19000101') DESC)
FROM dbo.Messages m
LEFT OUTER JOIN dbo.Comments c ON c.MessageId = m.MessageId
)
SELECT
MessageId, MessageText, PostedDate
FROM
CTE
WHERE
RowNum = 1
ORDER BY
CommentDate DESC
這CTE「分區」的數據由MessageID
,然後編號的所有意見 - 如果有的話 - 通過他們的CommentDate
。因此,對於每個MessageID
,您應該獲得連續的RowNum
值 - 從1開始最近的評論。
從此CTE(「臨時」行內視圖)中,您只需選擇所有具有最新評論日期的行的RowNum = 1
。我還選擇了CTE內部的CommentDate
,由於我認爲可能還沒有評論,因此我使用ISNULL()
函數確保在沒有評論的情況下提供評論日期。
「信息1發佈日期>信息2發佈日期」是否可以嗎?因爲消息2在消息1後發佈,所以消息2發佈日期大於消息1發佈日期。 –
你可以發佈你的SQL查詢來顯示消息與coment .. –