我正在尝试为每个考试和每个用户提供最快的时间,但似乎无法获得我正在寻找的结果。例如,如果我有一个表格如下......
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
答案 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)
我认为这样做,我的有限测试似乎表明它有效......
注意:我使用mins
和secs
作为我的列名,以避免内置函数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