2011-12-16 72 views
0

我有一个名为游戏的“记分牌”表内容如下SQL查询检索排名列表

+-----------+----------+--------+---------------------+ 
| Team_name | Level | Status | completed_time  | 
+-----------+----------+--------+---------------------+ 
| sample1 |  1 | yes | 2011-09-11 15:15:44 | 
| sample2 |  1 | yes | 2011-09-11 15:48:13 | 
| sample2 |  2 | yes | 2011-09-11 15:50:13 | 
| sample2 |  3 | yes | 2011-09-11 15:52:13 | 
| sample1 |  2 | yes | 2011-09-11 15:16:52 | 
| sample1 |  3 | yes | 2011-09-11 15:31:06 | 
| sample1 |  4 | yes | 2011-09-11 15:31:47 | 
| sample1 |  5 | no  | 2011-09-11 15:31:47 | 
| sample2 |  4 | no  | 2011-09-11 15:52:13 | 
| sample4 |  1 | yes | 2011-09-12 17:11:51 | 
| sample4 |  2 | yes | 2011-09-12 17:12:18 | 
| sample4 |  3 | yes | 2011-09-12 17:16:53 | 
| sample4 |  4 | yes | 2011-09-13 22:58:24 | 
| sample4 |  5 | yes | 2011-09-14 03:03:21 | 
| sc102  |  1 | yes | 2011-09-14 01:42:20 | 
| sc102  |  2 | no  | 2011-09-14 01:42:20 | 
| sample4 |  6 | yes | 2011-09-14 03:08:20 | 
| sample4 |  7 | no  | 2011-09-14 03:08:20 | 
| Javad  |  1 | yes | 2011-09-14 21:07:05 | 
| Javad  |  2 | yes | 2011-09-14 21:08:47 | 
| Javad  |  3 | yes | 2011-09-14 21:18:40 | 
| Javad  |  4 | yes | 2011-09-14 21:25:12 | 
| Javad  |  5 | yes | 2011-09-14 21:34:25 | 
| Javad  |  6 | yes | 2011-09-14 21:41:33 | 
| Javad  |  7 | yes | 2011-09-14 21:47:31 | 
| Javad  |  8 | yes | 2011-09-14 21:48:15 | 
| Javad  |  9 | yes | 2011-09-14 21:48:25 | 
| Javad  |  10 | yes | 2011-09-14 21:49:07 | 
| SCAV527 |  1 | yes | 2011-12-05 21:15:30 | 
| SCAV527 |  2 | yes | 2011-12-05 21:20:30 | 
| SCAV527 |  3 | yes | 2011-12-05 21:20:46 | 
| SCAV527 |  4 | no  | 2011-12-05 21:20:46 | 
+-----------+----------+--------+---------------------+ 

我需要基于团队及其completed_time解决级别准备比赛的排名名单。如果不止一个团队解决了一个等级,那么首先根据completed_time来解决首先解决的团队。在准备排名表时,应该省略状态为“否”的行。

查询的输出应该包含字段,如team_name,level,completed_time。

你能帮我写一个SQL查询级别列表吗?我使用MySQL作为后端。

查询的输出应该是这样的。

+-----------+-----------+----------+---------------------+ 
| Rank  | Team_name | Level | completed_time  | 
+-----------+-----------+----------+---------------------+ 
| 1   | Javad  |  10 | 2011-09-14 21:49:07 | 
| 2   | sample4 |  6 | 2011-09-14 03:08:20 | 
| 3   | sample1 |  4 | 2011-09-11 15:31:47 | 
| 4   | SCAV527 |  3 | 2011-09-10 21:20:46 | 
| 5   | sample2 |  3 | 2011-09-11 15:52:13 | 
| 6   | sc102  |  1 | 2011-09-14 01:42:20 | 
+-----------+-----------+----------+---------------------+ 

回答

0
SELECT @rank:[email protected]+1 as rank, r.* 
FROM (
    SELECT team_name, MAX(level) as level, MAX(completed_time) as completed_time 
    FROM results 
    WHERE `status` = 'yes' 
    GROUP BY team_name 
    ORDER BY 2 DESC) as r, (SELECT @rank:=0) as init 
0

成才像这可能帮助:

 
SELECT v1.Team_name, v1.Level , COUNT(v2.Level) AS Rank 
FROM scoreboard v1 
JOIN scoreboard v2 ON v1.Level < v2.Level OR (v1.Level =v2.Level and v1.Team_name = v2.Team_name) 
WHERE v1.status = "yes" 
GROUP BY v1.Team_name, v1.Level 
ORDER BY v1.Level DESC, v1.Team_name DESC; 
+0

将尝试这个兄弟...... – 2011-12-16 11:16:03

+0

我想这一点。它没有告诉completed_time。我得到的结果不像上面那样。 – 2011-12-19 10:26:53