с использованием random () :
SELECT foo FROM bar
WHERE id >= (abs(random()) % (SELECT max(id) FROM bar))
LIMIT 1;
РЕДАКТИРОВАТЬ (по QOP): Поскольку в документах по Автоинкремент SQLite ed столбцы указано, что:
Обычный алгоритм выбора ROWID, описанный выше сгенерирует
монотонно увеличивающиеся уникальные ROWID до тех пор, пока вы никогда не используете
максимальное значение ROWID, и вы никогда не удаляете запись в таблице с
самый большой РОУИД. Если вы когда-либо удаляете строки, то ROWID из
ранее удаленные строки могут быть повторно использованы при создании новых строк .
Вышеприведенное верно только в том случае, если у вас нет столбца INTEGER PRIMARY KEY AUTOINCREMENT
(он все равно будет хорошо работать со столбцами INTEGER PRIMARY KEY
). В любом случае, это должно быть более переносимым / надежным:
SELECT foo FROM bar
WHERE _ROWID_ >= (abs(random()) % (SELECT max(_ROWID_) FROM bar))
LIMIT 1;
ROWID
, _ROWID_
и OID
- все псевдонимы для внутреннего идентификатора строки SQLite.