我正在编写sql查询以获取帖子,并且仅发布该帖子的最后评论(如果存在)。但是我找不到一种方法来限制左连接中的右列仅限制一行。
这是此查询的示例。
SELECT post.id, post.title,comment.id,comment.message from post left outer join comment on post.id=comment.post_id
如果帖子有3条评论,则此帖子可获得3行,但我只希望有1条带有最后评论(按日期排序)。
有人可以帮我这个查询吗?
SELECT post.id, post.title, comment.id, comment.message FROM post OUTER APPLY ( SELECT TOP 1 * FROM comment 褋 WHERE c.post_id = post.id ORDER BY date DESC ) comment
或者
SELECT * FROM ( SELECT post.id, post.title, comment.id, comment.message, ROW_NUMBER() OVER (PARTITION BY post.id ORDER BY comment.date DESC) AS rn FROM post LEFT JOIN comment ON comment.post_id = post.id ) q WHERE rn = 1
前者对于很少的帖子,每个帖子中都有很多评论,效率更高;对于许多帖子,每个帖子中都很少有评论,后者的效率更高。