我正在努力获得前三名最快的身份证,如果有一个平局使用第二和第三快的时间作为平局休息。所以在下面的例子中,3和5是并列第三快的两次,而3是并列第二快的两次。
最好的结果将显示每个id的第1、第2和第3次,并按每个id的第1快、第2快和第3快排序。
所以桌子看起来是这样的:

 ID | TIME
----|-------
 1  |  6.45
 2  |  12.43
 1  |  4.52
 4  |  16.24
 5  |  9.43
 2  |  10.46
 2  |  8.46
 3  |  17.49
 4  |  20.46
 3  |  16.49
 5  |  16.97
 3  |  9.43
 1  |  25.77

我在一次查询中试图得到正确的结果。。
所需的输出如下:
 ID | lowest time | 2nd lowest | 3rd lowest
----|-------------|------------|------------
 1  |  4.25       | 6.45       | 25.77
 2  |  8.46       | 10.46      | 12.43
 3  |  9.43       | 16.49      | 17.49
 5  |  9.43       | 16.97      |

最佳答案

CREATE TABLE times  (ID int, theTime Decimal(5,2));

INSERT INTO times VALUES (1, 6.45),
(2, 12.43),
(1, 4.52),
(4, 16.24),
(5, 9.43),
(2, 10.46),
(2, 8.46),
(3, 17.49),
(4, 20.46),
(3, 16.49),
(5, 16.97),
(3, 9.43),
(1, 25.77);


SELECT DISTINCT
    id,
    (SELECT thetime FROM times t2 WHERE t.iD = t2.id
     order by thetime limit 1) lowesttime,
    (SELECT thetime FROM times t2 WHERE t.iD = t2.id
     order by thetime limit 1,1) secondlowest,
    (SELECT thetime FROM times t2 WHERE t.iD = t2.id
     order by thetime limit 2,1) thirdlowest
 FROM
    times t
 ORDER BY
    lowesttime,
    secondlowest,
    thirdlowest
LIMIT 3   ;



SELECT t1.id,
       Min(t1.thetime) lowesttime,
       Min(t2.thetime) secondlowest,
       Min(t3.thetime) thirdlowest
FROM   times t1
       LEFT JOIN times t2
         ON t1.id = t2.id
            AND t1.thetime < t2.thetime
       LEFT JOIN times t3
         ON t2.id = t3.id
            AND t2.thetime < t3.thetime
GROUP  BY t1.id
ORDER  BY lowesttime,
          secondlowest,
          thirdlowest
LIMIT  3 ;

我想第二个会更快,但我不确定,
请注意,正如btilly指出的,如果ID 1是这样的
ID| Time
--------
1 | 4.52
1 | 4.52
1 | 25.77

然后,对于第二个不正确的查询,最终输出将如下所示
ID | lowesttime | secondlowest | thirdlowest
-------------------------------------------
1  | 4.52       | 25.77        | null
2  |8.46        | 10.46        | 12.43
3  |9.43        | 16.49        | 17.49

关于mysql - 使用第二低和第三低的条件,用抢七局查询第一,第二,第三名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6523082/

10-11 22:49
查看更多