2015-05-04 54 views
1

我有成千上萬的羣體在一個表中,是這樣的:選擇前100組

1.. 
1.. 
2.. 
2.. 
2.. 
2.. 
3.. 
3.. 
. 
. 
. 
10000.. 
10000.. 

我怎樣才能使一個選擇給我的前3組各一次。

我想要的東西像從行中選擇Top 3,但它必須返回前三組而不是前三行。

+0

你有相同的記錄或不同的記錄? –

+0

我不確定你的意思,你可以擴展一下你想做的事情嗎? – HoneyBadger

+0

你只想要組ID還是一些彙總數據?按哪個順序? – 1010

回答

3

你可以試試這個:

;with cte as (

select distinct groupId from mytable order by groupid 
) 
select * from mytable where TheGroupId in (select top 3 groupdid from cte) 
1

您可以使用DENSE_RANK爲每個組分配一個數字。同一組的所有成員將具有相同的編號。然後在外部查詢,選擇頂部3組:

SELECT * 
FROM (SELECT *, DENSE_RANK() OVER (ORDER BY id) AS rnk 
     FROM mytable) t 
WHERE t.rnk <= 3 

上述查詢假定id是用於組的列記錄在一起。

SQL Fiddle Demo

0

有一個SQL TOP聲明,做是做什麼的這個

SELECT TOP number|percent column_name(s) FROM table_name; 

的描述,它是如何在替代使用例如用於mysql和ms訪問的sql語句可以在這裏找到:http://www.w3schools.com/sql/sql_top.asp

我的錯誤我誤解了你的問題,這將返回頂部的行而不是組,你能解釋你正在試圖做更詳細的?

+0

嘿,你知道嗎,你在評論中提問而不是在答案中。您應該編輯或刪除您的答案。 – Stephan

0
SELECT * 
FROM 
    (SELECT * 
      ,ROW_NUMBER() OVER (PARTITION BY [Group] ORDER BY [Group] ASC)rn 
    FROM TableName 
    )A 
WHERE rn <= 3 
1

使用排序功能Row_Number()

SELECT * 
FROM (SELECT *, 
       Row_number() 
       OVER(
        partition BY GroupId 
        ORDER BY GroupId) AS [rn] 
     FROM YourTable) t 
WHERE rn <= 3 

檢查這個MSDN doc爲所有排名功能的細節。