2013-05-25 4 views
1

В настоящее время мой запрос выглядит следующим образом:Получить предыдущую/следующую запись в 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 является T EXT, но я хотел бы иметь возможность сортировать по любому другому полю, поэтому я хочу, чтобы мой запрос работал с любым типом.

ответ

4

Чтобы получить предыдущую строку таким образом, вы будете иметь порядок имен в descendinng порядке вместо восходящего, иначе вы всегда получите имя. Также: В этом случае лучше использовать 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

+0

, которая работала, спасибо;) – Alex

1

Попытка использования STRCMP(), как описано в http://www.sqlite.org/datatypes.html

Я думаю, что одна проблема для вас может быть, что ваш > не работает, как вы подозреваете, что в первую очередь.

Смежные вопросы