2010-04-01 57 views
1

什麼是可擴展的方式來從每個類別中選擇最新的10個項目。SQL最新/類別中的熱門項目

我有一個規劃列表如下:

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

這不會編譯,但你必須的總體思路:

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 
+0

對不起,我離開了引號。我原來不是sql,而只是sql字符串生成。這是你說的嗎? – drozzy 2010-04-01 16:02:48

+0

在SQL 2005中可以直接使用,您可以使用PARTITION元素並將您的類別重新分組爲分區並選擇前10個。 – 2010-04-01 19:05:04