2012-02-22 48 views
0

我正在構建一個有記分牌的應用程序。 問題是,記分牌應該顯示他的班級中玩家的等級。但是按照最近的時間順序顯示。SQL中的排名,排序不同

我想用數據庫選擇(SQL)來做到這一點。

rank name time class how_recent 
1. George 2.00 V1  1 min ago 
2. Bill  3.00 V1  2 min ago 
1. Christoffer 1.00 V2  3 min ago 
3. Heini. 3.00 V5  4 min ago 

除了排名之外的所有內容均從數據庫中選擇。 我有秩選擇只是類:

SELECT a1._id, 
     a1.name, 
     a1.TIME, 
     COUNT(a2.TIME) rank 
FROM players a1, 
     players a2 
WHERE ((a1.TIME >= a2.TIME 
      AND a1.TIME > 0) 
      OR (a1.TIME > 0 
       AND a1.TIME = a2.TIME 
       AND a1.name = a2.name)) 
     AND a1.TIME > 0 
     AND a2.TIME > 0 
     AND a1.class = v1 
     AND a2.class = v1 
GROUP BY a1.name, 
      a1.TIME 
ORDER BY a1.TIME ASC, 
      a1.name DESC 

這個我顯示在simpleCursorAdapter,我的問題是: 是否有可能獲得操作SQL SELECT或選擇和之間進行simpleCursorAdapter

感謝大家可以幫助我

回答

0

我要去假設秩是每一個人類中的排名。而且時間最短的那個排名最高。

假設下面的數據:

create table players (time float, 
         class char(2), 
         name char(10), 
         id char(2)); 

insert into players values (2.0, 'V1', 'George', 1), 
          (3.0, 'V1', 'Bill', 2), 
          (1.0, 'V2', 'Chris', 3), 
          (3.0, 'V5', 'Heini', 4); 

然後將以下SQL給出了最低時間每個類內的排序​​:

select a1.id, 
     a1.name, 
     a1.time, 
     a1.class, 
     (select count(*) 
      from players a2 
      where a2.class = a1.class 
      and a2.time <= a1.time) as rank 
from players a1 
order by a1.class, 
      a1.time asc, 
      rank desc; 

這給出結果:

NAME TIME CLASS RANK 
George 2.0  V1 1 
Bill 3.0  V1 2 
Chris 1.0  V2 1 
Heini 3.0  V5 1 

通過將第二個連接放入一個子查詢中,計算每行相對於其他元素的排名rs在同一個班級內。

我用黑泥在你的例子混淆應該有秩= 3,因爲他是類的唯一成員=「V5」,所以我假定這是一個錯字,應該是1

是這是你正在尋找的那種結果?

--edit

如果你想誰並列第一個是#1,然後下一個是#3兩個人,然後將其更改爲:

select a1.id, 
     a1.name, 
     a1.time, 
     a1.class, 
     (select count(*) + 1 
      from players a2 
      where a2.class = a1.class 
      and a2.time < a1.time) as rank 
from players a1 
order by a1.class, 
      a1.time asc, 
      rank desc; 

的時間比較現在是<,而不是< =,它消除了對計數(*)中的匹配行進行計數,而是將1加回到計數中。兩個有最低的時間都將有0,這是<比時間+ 1 = 1。第三屆將有2在排名+ 1,使他們排名3前面。

+0

它工作正常顯示錶。一個問題。如果兩個人有最好的時間,他們都得到了排名第二。名單上的下一個人排名nr。來自「簡明英漢詞典」我希望他們都能排名爲1,下一個人排名爲nr。 3.任何想法? – Christoffer 2012-02-23 15:26:51

+0

查看上面的調整。這只是count(*)和where子句的輕微返工。 – 2012-02-23 17:39:58

+0

太棒了!完美的作品!謝謝 – Christoffer 2012-02-23 18:06:39