SQL最新/顶级项目

时间:2010-04-01 15:55:34

标签: sql

从每个类别中选择最新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万行)有多高效。 如果有办法一次性做到这一点 - 那就太好了。

任何帮助表示感谢。

1 个答案:

答案 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