2010-04-01 4 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

+0

SQL 2005에서는 PARTITION 요소를 사용하고 카테고리를 파티션으로 재구성하여 처음 10 개를 선택할 수 있습니다. –

관련 문제