每個ID返回前N行可以說我有一個包含幾百萬行的表看起來是這樣的:SQL查詢來在一系列的ID
memID | foo | bar | foobar
1 | blah | blah | blah
1 | blah | blah | blah
1 | blah | blah | blah
1 | blah | blah | blah
1 | blah | blah | blah
1 | blah | blah | blah
1 | blah | blah | blah
2 | blah | blah | blah
2 | blah | blah | blah
2 | blah | blah | blah
2 | blah | blah | blah
2 | blah | blah | blah
.
.
.
10001 | blah | blah | blah
10001 | blah | blah | blah
我需要一個查詢將返回頂部成員ID範圍內的每個memID有N行。 例如,如果N = 3,範圍爲0-2,它應該返回
memID | foo | bar | foobar
1 | blah | blah | blah
1 | blah | blah | blah
1 | blah | blah | blah
2 | blah | blah | blah
2 | blah | blah | blah
2 | blah | blah | blah
我已經考慮了幾個方法,首先在代碼中創建一個龐大的
SELECT TOP (3) *
FROM table
WHERE memID = 0
UNION ALL
SELECT TOP (3) *
FROM table
WHERE memID = 1
.
.
.
查詢。這可能不是一個現實的選擇,可能是顯而易見的原因。
第二種方法是創建一個臨時表,並遍歷memID的範圍,將每個memID的TOP 3插入該臨時表。
WHILE @MemID < 10000 AND @MemID > 0
BEGIN
INSERT INTO tmp_Table
SELECT TOP (3) *
FROM table
WHERE memID = @MemID
SET @MemID = @MemID + 1
END
這可行,但我想知道是否有一個更優雅的單一查詢解決方案,我失蹤了。
Cadaeic給了我一個沒有修補的答案,但是感謝大家提出的分析,看起來我有一些認真的閱讀要做。
定義'頂部'。您需要指定某些標準,選擇具有給定標識的行。 – 2009-02-17 20:57:43
編輯更清楚地表明TOP是一種功能。 – blogsdon 2009-02-17 21:08:03