2014-11-15 64 views
0

我想在數據集按列排序後選擇第10,第20和第50個條目。達到此目的的最佳方式是什麼?使用ORDER BY按索引選擇

+0

什麼DB引擎你用? –

+0

暫時與SQLite一起去。 – Jacob

回答

0

讓我們假定我們有如下表:

create table Test 
(
    value int 
); 

這裏是返回第一個查詢,第三和第六行:

select value 
from 
(
    select value, (select count(*) + 1 from Test t2 where t2.value < t1.value) as OrderId 
    from Test t1 
) tbl 
where tbl.OrderId in (1,3,6) 

,您可以嘗試here。如果Test表中存在重複,則上面的解決方案可以返回多於3行。

UPDATE

如果您想通過不同的列比value從我的例子中,你應該修改條件t2.value < t1.value進行排序。一般形式是t2.COLUMN_NAME < t1.COLUMN_NAME

+0

我在這個[modified sqlfiddle](http://sqlfiddle.com/#!7/46fa8/2)中更改了你的表以包含'id,productname'。如果我沒有錯過「12」的記錄,那麼我不會指望「酒吧12」被省略。 – surfmuggle

+0

您是否希望通過id或產品名稱列來排序數據集? –

+0

你問我還是OP?根據我對「在按列排序後」的理解,OP的問題包括任何列的排序選項。 – surfmuggle

0

最簡單,最有效的方法是隻使用LIMIT/OFFSET

SELECT * FROM MyTable ORDER BY whatever LIMIT 1 OFFSET 9 
UNION ALL 
SELECT * FROM MyTable ORDER BY whatever LIMIT 1 OFFSET 19 
UNION ALL 
SELECT * FROM MyTable ORDER BY whatever LIMIT 1 OFFSET 49