Как подсчитать количество строк до определенной строки в sqlite? - PullRequest
1 голос
/ 07 июля 2010

У меня есть база данных, в которой хранится ранг предмета.Ранг - это абсолютное значение, которое будет правильным, если все элементы будут приняты во внимание.

Если мне нужно только подмножество, скажем, четыре из этих элементов, это даст мне что-то вроде:

Rank     RowId in the whole Table
---------------
4         114 
8         71
70        16
83        7

Теперь мне нужно, чтобы int определял ранг только в подмножестве, где максимальный ранг - это количество элементов в подмножестве в моем примере 1,2,3,4.

Есть ли способ добиться этого в моем sqlite-запросе?Мне нужен только один из рангов в моей деятельности.Я думал упорядочить результаты запроса по рангу, а затем каким-то образом получить позицию элемента, который я хочу ранжировать в тот момент.Но как мне добиться этого с помощью sqlite?

Я попытался создать временную таблицу и вставить в нее подмножество следующим образом:

CREATE TABLE rank (ID);ВСТАВИТЬ В Положение ВЫБРАТЬ ИД из элементов, ГДЕ ITEM_ID = 3 ЗАКАЗАТЬ ПОЗИЦИЮ;ВЫБЕРИТЕ RowID из ранга WHERE ID = 9;DROP TABLE rank;

Это работает в SQLite Manager и возвращает правильное число.Но если я сделаю это в Android, произойдет сбой, сказав, что при компиляции запроса нет ранга таблицы

07-07 13:35:46.150: ERROR/AndroidRuntime(2047): Caused by: android.database.sqlite.SQLiteException: no such table: rank: , while compiling: SELECT RowID from rank WHERE ID = 9

Ответы [ 3 ]

1 голос
/ 07 июля 2010

Вы можете вывести ваш запрос (упорядоченный по рангу) во временную таблицу с идентификатором автоинкремента.

1 голос
/ 07 июля 2010

РЕДАКТИРОВАТЬ: нужно согласиться с @Matt, единственный способ, которым я смог это сделать, - это использовать метод временных таблиц.

Для чего это стоит вот как это выглядит ...

create temp table if not exists <temptable>(Id integer primary key, rank); 
insert into temptable(rank) select <column> from <table>; 
select * from temptable; 

РЕДАКТИРОВАТЬ: На самом деле это возвращает идентификатор, связанный со строкой, который не является последовательным, поэтому вы не всегда получите 1,2,3,4 ... Мне придется подумать о другом К сожалению.

Не уверен, понял ли я ваш вопрос. Вы в основном хотите это?

Id        Value
---------------
1         4
2         8 
3         70
4         83

Итак, вы хотите добавить псевдостолбец в качестве идентификатора независимо от того, что содержит ваше подмножество?

Если это правильно, то это должно сделать это ...

SELECT RowId, <other columns>.... FROM <table> WHERE <where>

Извиняюсь, если я неправильно понял.

0 голосов
/ 07 июля 2010

Если вам нужно прочитать только одну строку из подзапроса, вы всегда можете выполнить для нее ограничение, указав смещение количества записей, которые должны быть пропущены первыми, и количества, которое должно быть возвращено

, поэтому есливы хотите получить 25-й ряд, который вы говорите, чтобы пропустить 24, и вернуть 1

select * from (SELECT * FROM table order by rank) limit 24,1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...