2010-07-07 118 views
1

我有一個數據庫,存儲一個項目的排名。 等級是一個絕對值,如果考慮到所有項目,這個值就是正確的。如何計算sqlite中特定行之前的行數?

如果我只需要一個子集說的這個項目4它會給我這樣的:

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

我現在需要一個int僅在最大級別是項目數的子集指定秩在我的例子中的子集1,2,3,4。

有沒有辦法在我的sqlite查詢中實現這一點?我只需要我的活動中的一個等級。我想按排名排序查詢的結果,然後以某種方式獲得我想在那一刻排名的項目的位置。但是,我將如何與sqlite實現這一點?

我試圖創建一個臨時表,並插入子集分爲這樣的:

CREATE TABLE秩(ID); INSERT INTO從項目位置SELECT ID WHERE ITEM_ID = 3 ORDER BY POSITION; 從等級WHERE ID = 9的SELECT RowID; DROP TABLE rank;

這是在SQLite管理器中工作,並會返回正確的數字。但是,如果我這樣做在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

你可以請張貼您的架構,樣本值,並希望看到預期的結果。 – Pentium10 2010-07-07 10:42:24

回答

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> 

道歉,如果我誤解了。

+0

RowId爲我提供了整個表中行的Id,而不是從表中獲得的子集。 – Janusz 2010-07-07 10:40:58

1

您可以將您的查詢(按等級排序)輸出到帶有自動增量ID的臨時表中。

+0

我創建了一個臨時表並在其中插入了一些東西,但是如果從表中讀取,我得到一個表不存在的錯誤,但這在sqlite資源管理器中正常工作,但不在模擬器上 – Janusz 2010-07-07 11:42:55

+0

當您嘗試執行「選擇* from temptable'? – 2010-07-07 12:07:39

+0

是寫作品,但閱讀不起作用 – Janusz 2010-07-07 13:57:20

-1

如果需要讀取一個子查詢只有一排,你總是可以在其上執行的限制,通過提供補償的多少記錄被第一跳過,多少要返回

所以如果你想要得到第25行,你告訴跳過24,並返回1

select * from (SELECT * FROM table order by rank) limit 24,1 
+0

但是,這不會給我在我的子集中的行的位置......你看過我的問題嗎?這可能有點難以理解,但我不認爲這是我的問題的答案。 – Janusz 2010-07-07 10:57:02

+0

25分鐘前我要求提供更多信息,請提供。 「你是什麼意思?」我想按排名排序查詢的結果,然後以某種方式獲得我想在那一刻排名的項目的位置。 ' – Pentium10 2010-07-07 11:04:09