--获取每个分类下的N条记录
select *
from(
select *,rn=row_number() over (partition by 类别 order by 日期 desc)
from @tb
)t
where rn <= N
--或者
select
distinct b.*
from
@tb a
cross apply
(select top N * from @tb where 类别=a.类别 order by newid())b