我有一个我收集统计数据的表,有3列:id,year和points。我想获得每年按点排序的前N行。在真实场景中,有更多列,但如果我可以获得ID和年份,并使用子选择获得其余列。是否有更简单的方法来做到这一点,而不是每年单独做一次?
答案 0 :(得分:2)
您可以将OVER clause
与window functions
一起用于每组结果的前N个
;WITH cte
AS (SELECT Row_number()
OVER(
partition BY year
ORDER BY points Desc) Rn,
*
FROM tablename)
SELECT *
FROM cte
WHERE rn <= 10