1

目前我的查询如下所示:

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

(在这里找到)

它似乎有效,但如果我更改><(获取以前的记录),我没有得到任何结果,即使我知道有:(

我究竟做错了什么?

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

4

2 回答 2

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

于 2013-05-25T13:59:19.877 回答
1

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

我认为对你来说一个问题可能是你>没有像你一开始怀疑的那样工作。

于 2013-05-25T13:43:20.133 回答