2011-12-16 56 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