Вернуть строки вокруг моих аргументов выбора («окружающие строки») в запросе к базе данных - PullRequest
1 голос
/ 07 декабря 2011

Я запрашиваю базу данных в Android.Таблица - это обычная таблица со значениями, ничего особенного.

Что мне нужно: вернуть два события, которые произошли до и после заданной отметки времени.

Пример: давайтеПредположим, у меня есть таблица ниже, и мой выбор 1332200003002:

_id |    Time       | Value
   ...    ...
n   | 1332200002000 | 145
n+1 | 1332200003001 | 98 (this is <= selection)
   (1332200003002 is here, between those two)
n+2 | 1332200004000 | 90 (this is > selection)
n+3 | 1332200005000 | 100
n+4 | 1332200005001 | 280

Итак, если мой выбор 1332200003001 или 1332200003002 ... Я бы хотел, чтобы возвращаемые строки были n + 1 и n + 2 , чтобы я мог видеть, что Value перешел с 98 на 90.

То, что я использую , является CursorLoader, поэтому он предпочтительно должен вписываться в свой обычный вызов.

Мой размер кода спасибо!


Как примечание , я могу угадать безопасные значения для BETWEEN (это IS уже работает), а затем итерировать несколько оставшихся Cursor строк в Java, чтобы точно определить две нужные мне строки.Однако это кажется мне очень распространенной потребностью, отсюда и вопрос.Кажется пустой тратой сделать это в Java со всеми этими обычными тестами, которые мы должны делать с курсором.

1 Ответ

0 голосов
/ 07 декабря 2011
SELECT *
FROM myTable LIMIT 2
OFFSET
  (SELECT _id
   FROM myTable
   WHERE time<=1332200003002
   ORDER BY time DESC LIMIT 1) - 1;

Что это делает:

Выберите 2 записи из таблицы.Смещение первой записи выбирается следующим образом:

Выберите самую последнюю строку, где time <= 1332200003002, и рассчитайте ее смещение из первой строки.

Требуется -1 в концеесли ваши значения _id начинаются с 1, а не с 0. (При необходимости измените это значение, чтобы преобразовать значения _id в смещения, начинающиеся с нуля.)

...