2

我有一个测验结果表。用户可以为每个类别一遍又一遍地接受它——我需要每个类别的最高分和相应的时间戳。

所以我真的很接近但时间戳字段正在杀死我。

这是一个用户数据:(“score”是带有 %s 的 varchar - 这就是我得到的。也按类别排序,然后是最高分,然后是时间戳。如果我可以为每个完成的类别取第一行。)

catid  score   timestamp
5   100%    2012-03-22 19:26:41
6   88.89%  2012-06-12 15:20:41
6   77.78%  2012-06-12 15:17:58
7   100%    2012-06-12 16:08:35
7   100%    2012-06-12 16:03:35
7   53.33%  2012-06-12 15:59:44
8   88.89%  2012-06-12 16:13:00
9   83.33%  2012-06-12 16:22:19
10  100%    2012-06-12 17:55:50
10  76.47%  2012-06-12 17:51:54
11  100%    2012-06-12 18:07:12
11  66.67%  2012-06-12 18:05:35

这是我需要的:

catid  score          timestamp
5   100%    2012-03-22 19:26:41
6   88.89%  2012-06-12 15:20:41
7   100%    2012-06-12 16:08:35
8   88.89%  2012-06-12 16:13:00
9   83.33%  2012-06-12 16:22:19
10  100%    2012-06-12 17:55:50
11  100%    2012-06-12 18:07:12

这是我正在使用的 MySQL:

SELECT catid
 , MAX(0 + score)
 , `timestamp`

FROM `results` 
WHERE userid = 100
GROUP BY catid
ORDER BY catid ASC
 , (0 + score) DESC
 , timestamp DESC
;

它正在生成的表格:

5   100 2012-03-22 19:26:41
6   88.89   2012-06-12 15:17:58
7   100 2012-06-12 15:59:44
8   88.89   2012-06-12 16:13:00
9   83.33   2012-06-12 16:22:19
10  100 2012-06-12 17:51:54
11  100 2012-06-12 18:05:35

如此接近 - 但时间戳不是与最大值相关联的时间戳。发生了什么事,我该如何解决?

谢谢!

4

2 回答 2

2

如果您使用数字类型而不是字符串来存储百分比,那么您的表格会好上 328 倍。但是,对于这个答案,我会忽略这个问题,尽管你真的应该尽快修复它。

您可以按以下方式解决您的问题:

SELECT catid, score, MAX(timestamp) AS timestamp
FROM results
WHERE userid = 100
AND (catid, CAST(score AS DECIMAL(5,2))) IN
(
    SELECT catid, MAX(CAST(score AS DECIMAL(5,2))) AS score
    FROM results
    WHERE userid = 100
    GROUP BY catid   
)
GROUP BY catid

在线查看它:sqlfiddle

或者将日期时间格式化为字符串:sqlfiddle

结果

CATID 分数时间戳
5 100% 2012-03-22 19:26:41
6 88.89% 2012-06-12 15:20:41
7 100% 2012-06-12 16:08:35
8 88.89% 2012-06-12 16:13:00
9 83.33% 2012-06-12 16:22:19
10 100% 2012-06-12 17:55:50
11 100% 2012-06-12 18:07:12
于 2012-07-12T23:45:16.680 回答
0
SELECT MAX(score), catid, timestamp FROM db.table GROUP BY catid ORDER BY score DESC;
于 2012-07-12T22:59:41.353 回答