我有一张表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
答案 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);