我有一个如下所示的表:comment_id,user_id,comment,last_updated。
Comment_id是关键所在。每个用户可能有多个评论。
如何为每个用户获取5条最新评论(SQL Server的SQL查询)?
输出应该与原始表类似,只是将用户的评论限制为每个用户最近的5个。
答案 0 :(得分:10)
至少假设SQL Server 2005,您可以使用窗口函数(row_number)和CTE:
;with cteRowNumber as (
select comment_id, user_id, comment, last_updated, ROW_NUMBER() over (partition by user_id order by last_updated desc) as RowNum
from comments
)
select comment_id, user_id, comment, last_updated
from cteRowNumber
where RowNum <= 5
order by user_id, last_updated desc
答案 1 :(得分:2)
Joe的回答是在SQL Server中执行此操作的最佳方式(至少,我认为是,我不熟悉CTE)。但这是一个使用标准SQL的解决方案(不是很快!)
SELECT * FROM comments c1
WHERE (SELECT COUNT(*) FROM comments c2
WHERE c2.user_id = c1.user_id AND c2.last_updated >= c1.updated) <= 5
答案 2 :(得分:0)
SELECT TOP 5 * FROM table WHERE user_id = x ORDER BY comment_id ASC
我认为应该这样做。
答案 3 :(得分:0)
在SqlServer 2005中,LIMIT无效。
相反,做一些事情:
SELECT TOP(5) * FROM Comment WHERE user_id = x ORDER BY comment_id ASC
请注意,这假设comment_id是单调递增的,这可能并不总是对于标识字段的有效假设(例如,如果它们需要重新编号)。您可能想要考虑替代字段,但基本结构将是相同的。
请注意,如果您按日期字段排序,则需要按降序排序,而不是按升序排序,例如
SELECT TOP(5) * FROM Comment WHERE user_id = x ORDER BY last_updated DESC