从每个类别中选择最新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万行)有多高效。 如果有办法一次性做到这一点 - 那就太好了。
任何帮助表示感谢。
答案 0 :(得分:0)
这不会编译,但你会有一般的想法:
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