你可以尝试这样的事情,使用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 .. –