SQL类别中的最新/顶级项
从每个类别中选择最新10项的可扩展方式是什么 我有一个模式列表: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
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个。