根据多个列进行选择

时间:2011-07-08 15:44:43

标签: mysql

我正在尝试为每个考试和每个用户提供最快的时间,但似乎无法获得我正在寻找的结果。例如,如果我有一个表格如下......

id  name    testname    min     sec     daterecorded        
1   joe     Exam1       3       22      2011-05-29
2   pat     Exam2       4       22      2011-06-01
3   pat     Exam2       6       26      2011-06-04
4   joe     Exam1       3       13      2011-06-02
5   pat     Exam1       5       44      2011-06-23
6   joe     Exam2       4       23      2011-06-22

如果我针对他所参加的任何考试以最快的时间运行查询,我试图获得以下结果

6   joe Exam2   4   23  2011-06-22
4   joe Exam1   3   13  2011-06-02

或者,如果我为Pat跑,我会得到......

2   Pat Exam2   4   22  2011-06-01
5   Pat Exam1   5   44  2011-06-23

2 个答案:

答案 0 :(得分:2)

从您的表格看起来很难概述解决方案,但我会尝试。请注意它是T-SQL,但我相信在这种简单的情况下,MySQL和T-SQL之间应该没有区别。至少,你应该抓住这个想法

SELECT mt.Id, mt.Name, mt.testname, mt.min, mt.sec, mt.daterecorderd
FROM MyTable mt JOIN (
    SELECT Name, testname, MIN(min*60 + sec) time
    FROM MyTable
    GROUP BY Name, testname) s ON 
        mt.Name = s.Name AND 
        mt.testname = s.testname AND
        s.time = mt.min*60 + mt.sec

答案 1 :(得分:0)

我认为这样做,我的有限测试似乎表明它有效......

注意:我使用minssecs作为我的列名,以避免内置函数MIN出现问题。我不确定是否需要它,但如果你想要试一试。

SELECT 
 name, 
 testName, 
 FLOOR(min(mins*60+secs)/60) as minutes, 
 FLOOR(min(60*mins + secs)%60) as seconds 
FROM 
 `theTable` 
WHERE 
 name = 'pat' 
GROUP BY testName