SQL类别中的最新/顶级项

SQL类别中的最新/顶级项,sql,Sql,从每个类别中选择最新10项的可扩展方式是什么 我有一个模式列表: item category updated 因此,我想从每个类别中选择10个上次更新项目。我能想到的当前解决方案是先查询类别,然后发出某种联合查询: categories = sql.execute("select categories from categories_table") query = "" for cat in categories: query += "union select top 10 fr

从每个类别中选择最新10项的可扩展方式是什么

我有一个模式列表:

item   category   updated
因此,我想从每个类别中选择10个上次更新项目。我能想到的当前解决方案是先查询类别,然后发出某种联合查询:

categories = sql.execute("select categories from categories_table")
query = ""
for cat in categories:
   query += "union select top 10 from table where category=cat order by updated"
result = sql.execute(query)
我不确定这对于更大的数据库(100万行)的效率有多高。 如果有一种方法可以一次性完成,那就太好了


感谢您的帮助。

这将不会编译,但您会有大致的想法:

from i in table
group i by i.category into g
select new { cat = g.Key, LastTens = g.OrderByDescending(o => o.Updated).Take(10).Select(...) }
编辑:SQL的问题:

SELECT * FROM 
(
    SELECT
        ROW_NUMBER() OVER (PARTITION BY categoryId ORDER BY somedate) AS PartNum,
        categoryId,
            [...]
    FROM
        category
) AS Partitionned
WHERE PartNum <= 10

对不起,我漏掉了这些引语。我最初的代码不是sql,而是sql字符串生成。这就是您要说的吗?好的,在SQL 2005中,您可以使用PARTITION元素将类别重新分组到分区中,然后选择前10个。