[英]How can I count the number of rows before a certain row in sqlite?
我有一個存儲項目等級的數據庫。 如果考慮所有項目,則等級是絕對正確的絕對值。
如果我只需要其中一個子集,請說出其中四個選項,它將給我一些類似的信息:
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的位置插入項目中的位置SELECT ID; 從等級WHERE ID = 9中選擇SELECT 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
編輯:必須與@Matt達成一致,我能夠做到這一點的唯一方法是使用臨時表方法。
對於它的價值,這就是它的樣子……
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>
抱歉,如果我誤會了。
您可以將查詢(按等級排序)輸出到具有自動增量ID的臨時表中。
如果您只需要從子查詢中讀取一行,則可以通過提供首先要跳過多少條記錄以及要返回多少條記錄的偏移量來始終對其執行限制
因此,如果您想獲得第25行,請告訴您跳過24,然后返回1
select * from (SELECT * FROM table order by rank) limit 24,1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.