从一个表中选择每个类别下的最新20条记录

时间:2015-01-17 09:57:01

标签: sql-server

我有一张这样的表

    Id  ||  title  ||  source  ||.. || category
------------------------------------------
    1   ||  John   ||  abs.com ||.. || a
    3   ||  Tala   ||  nar.com ||.. || a
    4   ||  John   ||  kam.com ||.. || b

我想创建一个查询或存储过程来获取每个类别的最新20条记录。有人可以帮我吗?

1 个答案:

答案 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最高的类别(最近的条目),这适用于所有类别组。