2012-07-06 48 views
2

我需要從表中前5行中選擇最小ID值。我得到頂級的ID與此查詢:SQLite:從有限的行集中選擇MIN

SELECT id FROM items ORDER BY id DESC LIMIT 5 

它工作正常,並從頂部5行返回ID值:

314 
313 
312 
311 
310 

現在,試圖從這個集合的最小ID:

SELECT MIN(id) FROM items ORDER BY id DESC LIMIT 5 

我期待的結果是但SQLite返回。 這是怎麼回事?我錯在哪裏,我能達到自己的目標?

UPDATE:

SELECT MIN(id) FROM (SELECT id FROM news_items ORDER BY id DESC LIMIT 5)作品,所以現在我只是好奇,什麼是錯的與第一查詢。

+0

那麼,你真的使用'MAX' ?,它應該是'MIN',而不是?並回答你的問題,你的桌子上最小的「ID」是什麼? – Lamak 2012-07-06 20:29:33

+0

@Lamak:對不起,我在代碼中的每個地方都使用了'MIN',這只是個問題(已經修復)。我桌子上的最小ID確實是** 1 **。 – Dyppl 2012-07-06 20:37:56

+0

你的最小值是'1'嗎?你的第一個查詢的結果是'0'?那麼我的回答是不正確的 – Lamak 2012-07-06 20:39:47

回答

1

假設您實際上使用的是MIN而不是MAX,那麼解釋非常簡單。 ORDER BY id DESC LIMIT 5是對您的查詢進行評估的最後一部分。所以,你的第一個查詢時,您是id檢索最小值(應該是0),那麼ORDER BY ....無關緊要,(您訂購併限制只有一行)

+0

好吧,所以我想這只是我理解SQL如何工作的一個漏洞,謝謝 – Dyppl 2012-07-07 08:52:27

0

ORDER BY需要整個數據集進行評估爲了得到正確的排序。

通過經驗證據我們可以假設MIN在每一行進行評估。 :)

+0

即使列索引,這是否正確? – 2015-06-21 01:23:24