我有一个存储项目等级的数据库。 如果考虑所有项目,则排名是绝对值。
如果我只需要一个子集说这四个项目,它会给我一些类似的东西:
Rank RowId in the whole Table
---------------
4 114
8 71
70 16
83 7
我现在需要一个int,仅在子集中指定排名,其中max rank是我的示例1,2,3,4中子集中的项目数。
有没有办法在我的sqlite查询中实现这一点?我只需要我的活动中的一个等级。我想到按排名排序查询的结果,然后以某种方式得到我想在那一刻排名的项目的位置。但是我如何用sqlite实现这个目标呢?
我尝试创建一个临时表并将子集插入其中,如下所示:
CREATE TABLE rank(ID); INSERT INTO位置SELECT ID来自项目WHERE ITEM_ID = 3 ORDER BY POSITION; 从等级WHERE ID = 9中选择RowID; DROP TABLE排名;
这在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
答案 0 :(得分:1)
这里的价值看起来是什么......
create temp table if not exists <temptable>(Id integer primary key, rank);
insert into temptable(rank) select <column> from <table>;
select * from temptable;
编辑:实际上,它返回与行不相关的ID,因此你不会总是得到1,2,3,4 ......我还要考虑别的东西。遗憾。
不确定我是否理解你的问题。你基本上想要这个吗?
Id Value
---------------
1 4
2 8
3 70
4 83
因此,无论您的子集包含什么,您都希望添加伪列作为ID?
如果这是正确的话那应该这样做......
SELECT RowId, <other columns>.... FROM <table> WHERE <where>
如果我误解了道歉。
答案 1 :(得分:1)
您可以将查询(按排名排序)输出到具有自动增量ID的临时表中。
答案 2 :(得分:-1)
如果您只需要从子查询中读取一行,则可以始终对其执行限制,方法是提供首先要跳过的记录数的偏移量以及返回的数量
所以,如果你想获得第25行,你告诉我跳过24,然后返回1
select * from (SELECT * FROM table order by rank) limit 24,1