我需要每个类别的前5条记录。 下面查询执行fineon sqlserver而不是我的sql,需要转换成mySql
SELECT N.TITLE AS NewsTitle , N.ID AS NewsID, NC.NAME AS NewsCategory, NC.ID AS NewsCatID
FROM (
SELECT N.TITLE AS NewsTitle , N.ID AS NewsID, NC.NAME AS NewsCategory, NC.ID AS NewsCatID, Rank() over (Partition BY NC.[NAME] ORDER BY N.TITLE ) AS Rank
FROM News N
INNER JOIN News_Category NC ON NC.ID = N.ID_News_Category
) rs WHERE Rank <= 5
答案 0 :(得分:1)
没有RANK
函数是MySQL。你可以在这里使用类似的方法:
然而,问题是这不会考虑队伍中的“关系”。您的2条评论表明您只需要添加Limit 5
几乎100%准确。
您可以(并且可能会)添加一些Limit 5
以及order by子句,这几乎可以完全解决您的问题。唯一剩下的就是Rank允许联系。这意味着当您选择Rank&lt; = 5,的位置时,您可以将6条或更多条记录作为结果(由于它们在排名中“绑定”,请在此处查看更多详细信息:{{3 }})。
总而言之,你应该想想,如果你真的 担心关系。如果你是,你应该google如果有人真的为mysql做了类似于t-sql的排名函数的某种排名功能。 stackoverflow链接的第二个答案有一种允许绑定的排名列,你应该检查它。如果您不那么担心,只需在查询中添加一些LIMIT 5
,因为最高评论者说,你会没事的。