我有成千上萬的羣體在一個表中,是這樣的:選擇前100組
1..
1..
2..
2..
2..
2..
3..
3..
.
.
.
10000..
10000..
我怎樣才能使一個選擇給我的前3組各一次。
我想要的東西像從行中選擇Top 3,但它必須返回前三組而不是前三行。
我有成千上萬的羣體在一個表中,是這樣的:選擇前100組
1..
1..
2..
2..
2..
2..
3..
3..
.
.
.
10000..
10000..
我怎樣才能使一個選擇給我的前3組各一次。
我想要的東西像從行中選擇Top 3,但它必須返回前三組而不是前三行。
你可以試試這個:
;with cte as (
select distinct groupId from mytable order by groupid
)
select * from mytable where TheGroupId in (select top 3 groupdid from cte)
您可以使用DENSE_RANK
爲每個組分配一個數字。同一組的所有成員將具有相同的編號。然後在外部查詢,選擇頂部3組:
SELECT *
FROM (SELECT *, DENSE_RANK() OVER (ORDER BY id) AS rnk
FROM mytable) t
WHERE t.rnk <= 3
上述查詢假定id
是用於組的列記錄在一起。
有一個SQL TOP聲明,做是做什麼的這個
SELECT TOP number|percent column_name(s) FROM table_name;
的描述,它是如何在替代使用例如用於mysql和ms訪問的sql語句可以在這裏找到:http://www.w3schools.com/sql/sql_top.asp
我的錯誤我誤解了你的問題,這將返回頂部的行而不是組,你能解釋你正在試圖做更詳細的?
嘿,你知道嗎,你在評論中提問而不是在答案中。您應該編輯或刪除您的答案。 – Stephan
SELECT *
FROM
(SELECT *
,ROW_NUMBER() OVER (PARTITION BY [Group] ORDER BY [Group] ASC)rn
FROM TableName
)A
WHERE rn <= 3
使用排序功能Row_Number()
:
SELECT *
FROM (SELECT *,
Row_number()
OVER(
partition BY GroupId
ORDER BY GroupId) AS [rn]
FROM YourTable) t
WHERE rn <= 3
檢查這個MSDN doc爲所有排名功能的細節。
你有相同的記錄或不同的記錄? –
我不確定你的意思,你可以擴展一下你想做的事情嗎? – HoneyBadger
你只想要組ID還是一些彙總數據?按哪個順序? – 1010