在sqlite中获取上一个/下一个记录

时间:2013-05-25 13:33:25

标签: sql sqlite

目前我的查询如下:

SELECT name FROM items
  WHERE something = "foo"
AND name > (SELECT name FROM items WHERE name = ?)
GROUP BY name
ORDER BY name ASC
LIMIT 1

(找到它here

它似乎有效,但是如果我将>更改为<(以获取以前的记录),即使我知道有以下结果,我也没有结果:(

我做错了什么?

name是一个TEXT字段,但我希望能够按任何其他字段排序,因此我希望我的查询可以使用任何类型。

2 个答案:

答案 0 :(得分:4)

要以这种方式获取前一行,您将按降序排序名称而不是升序,否则您将始终获得名字。另外:在这种情况下,最好使用select distinct代替group by

SELECT DISTINCT name FROM items
WHERE something = 'foo'
AND name < (SELECT name FROM items WHERE name = ...)
ORDER BY name DESC
LIMIT 1

这适用于sqlfiddle:http://sqlfiddle.com/#!7/a9f68/3/0

答案 1 :(得分:1)

尝试使用strcmp()详见http://www.sqlite.org/datatypes.html

我认为您遇到的一个问题可能是您的>无法正常工作。