2012-07-06 50 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