MYSQL如何从最高级别到最高级别获取行

时间:2013-12-10 12:52:57

标签: mysql

我有一张表agents

ID rank
1  300
2  302
3  304
4  305<--the highest number
5  301
6  260
7  301
...

您知道如何将排名最高的所有行(4 =&gt; 305)排到Rank = highest_rank- range 的行? 范围是用户定义的(例如= 3)。因此,在此示例中,它将是排名为305到302的行(ID:2,3,4)。 有没有更好的方式:

SELECT ID FROM `agents` WHERE rank >= (SELECT rank FROM `agents` ORDER BY rank DESC LIMIT 1)-3

1 个答案:

答案 0 :(得分:2)

假设我理解正确...

 CREATE TABLE agents
 (ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
 ,rank INT NOT NULL
 );

 INSERT INTO agents VALUES
 (1  ,300),
 (2  ,302),
 (3  ,304),
 (4  ,305),
 (5  ,301),
 (6  ,260),
 (7  ,301);

 SELECT x.*
   FROM agents x
   JOIN (SELECT MAX(rank) max_rank FROM agents) y
     ON y.max_rank-3 <= x.rank;
 +----+------+
 | ID | rank |
 +----+------+
 |  2 |  302 |
 |  3 |  304 |
 |  4 |  305 |
 +----+------+

BrokenHeart提供的替代答案已被删除。但这是一个很好的答案,所以我将它包括在内......

 SELECT id, rank FROM `agents` 
 where rank >= ((select MAX(rank) FROM `agents`)-13);