Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在SQL中排名,顺序不同_Android_Sql_Cursor - Fatal编程技术网

Android 在SQL中排名,顺序不同

Android 在SQL中排名,顺序不同,android,sql,cursor,Android,Sql,Cursor,我正在构建一个有记分板的应用程序。 关键是记分板应该显示球员在其班级中的排名。但按最近时间的顺序显示 我正试图用数据库selectsql来实现这一点 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.

我正在构建一个有记分板的应用程序。 关键是记分板应该显示球员在其班级中的排名。但按最近时间的顺序显示

我正试图用数据库selectsql来实现这一点

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  
这是我在SimpleCorsorAdapter中展示的,我的问题是: 是否可以在SQL SELECT中或在SELECT和simpleCursorAdapter之间完成操作


感谢所有能帮助我的人

,我将假设等级是每个类中的等级。时间最短的那个排名最高

假设以下数据:

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;
通过将第二个联接放置到子查询中,可以计算每一行相对于同一类中其他成员的排名

在您的示例中,我对Heini的排名应该为3感到困惑,因为他是class='V5'的唯一成员,所以我假设这是一个拼写错误,应该是1

这就是你想要的结果吗

-编辑

如果您希望两个第一个并列的人为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;

时间比较现在是一个很好的工具,它可以很好地显示表格。一个问题。如果两个人都有最好的时间,他们都得到排名2。名单上的下一个人排名第三。我希望他们都能排在第一位。下一个排名第三的人。有什么想法吗?请看上面的调整。这只是对count*&where子句的一点修改。太好了!很好用!谢谢
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;