Получить смещение ROWID в SQLite3 - PullRequest
1 голос
/ 05 сентября 2011

Как получить смещение конкретной строки в базе данных SQLite3? Я не говорю о ROWID, который не является линейным, я говорю о смещении / позиции определенного ROWID от первого ROWID в таблице.

Это что-то вроде SELECT COUNT(rowid) FROM table WHERE rowid < row, которое возвращает количество строк перед строкой, идентифицированной с row. Я чувствую, что это слишком медленно, поэтому я надеюсь, что есть другой способ, более быстрый, чем этот, который даст мне смещение / положение строки в таблице.

1 Ответ

1 голос
/ 28 сентября 2011
select top 1
   rowid
from
   table
where
  rowid < row
order by
  rowid desc

Это должно дать вам самый большой rowid перед вашей строкой. Вы также можете попробовать ...

select
   max(rowid)
from
   table
where
  rowid < row

... Но по моему опыту первый вариант работает лучше.

Если вы просто хотите количество строк перед вашей целевой строкой. Используйте ...

SELECT COUNT(1) FROM table WHERE rowid < row

По сути, то, что у вас было раньше, но не указывайте столбец, иначе он должен будет проверить этот столбец на наличие нулей при подсчете.

К сожалению, у вас нет доступа к функции "ROW_NUMBER ()", как в MS SQL.

(похожий вопрос относительно SQLLite и нумерации)

sqlite эквивалент row_number () over (разделить на ...?

Надеюсь, это поможет.

...