我有一张这样的表
Id || title || source ||.. || category
------------------------------------------
1 || John || abs.com ||.. || a
3 || Tala || nar.com ||.. || a
4 || John || kam.com ||.. || b
我想创建一个查询或存储过程来获取每个类别的最新20条记录。有人可以帮我吗?
答案 0 :(得分:1)
试试这个:
select rn, Id, title, [source], category
From
( select Id, title, [source], category, ROW_NUMBER() over (Partition By Category order by Id desc) as rn
from yourTable
) a where rn <= 20
order by category, rn
我们的想法是从每个类别(Row_Number()
)的最高ID开始为每个类别(Partition By Category
)创建唯一的序列号(使用..order by Id desc
)。最终,这会将类别数据拆分,并将最低数量(从一个开始)分配给ID最高的类别(最近的条目),这适用于所有类别组。