2009-05-25 49 views
4
table { 
    id: long 
    name: string 
} 

1235 Fred 
1902 Trever 
5123 George 
6467 Derek 
7868 Joe 
8972 Bob 
9272 Alf 
9842 Hank 

我想返回2條記錄之前的喬斯,在升序順序。帶有限制的SQL排序? (非微不足道)

即正確的值應該是:

5123 George 
6467 Derek 

有什麼想法? FYI:

  1. 返回不正確的行:

    SELECT * FROM與表ID < 7868 ORDER BY ID ASC限2

  2. 返回不正確的排序順序:

    SELECT * FROM表id < 7868 order by id desc limit 2

+0

使用的數據庫是SQLite - 但不要讓它停止你回答其他RDBMS - 它會無論如何都很高興:D – Matt 2009-05-26 00:02:15

回答

4
SELECT * FROM 
    (select * from table where id<7868 order by id desc limit 2) AS foo 
ORDER BY ID ASC 
+0

謝謝alex。令人驚訝的是,它也支持SQLite! :D – Matt 2009-05-26 00:34:09

+0

啊,是的,SQLite的嵌套選擇正確(以及其他許多) - amazin'小野獸,innit! - ) – 2009-05-26 01:29:59

1

嘗試:

Select * from (
    select * from table with id<7868 
    order by id desc limit 2 
) as t order by id asc 

這樣子查詢讓你第一次得到正確的行,那麼你可以重新排列它們之後

0

在PostgreSQL:

SELECT * FROM 「表」 裏編號< 7868順序編號asc限制2偏移量2

和MySQL類似(我相信)「限制2,2」

「LIMIT 2 OFFSET 2」也適用於SQLite,至少使用我試過的版本(3.6.13)