我有一个表:voj_submission,它的结构如下:
CREATE TABLE IF NOT EXISTS `voj_submissions` (
`submission_id` bigint(20) NOT NULL,
`problem_id` bigint(20) NOT NULL,
`uid` bigint(20) NOT NULL,
`submission_judge_result` varchar(8) DEFAULT NULL,
) ENGINE=InnoDB AUTO_INCREMENT=1004 DEFAULT CHARSET=utf8;表中的数据可能如下:
SubmissionID ProblemID UserID JudgeResult
1000 1000 User1 AC
1001 1000 User1 WA
1002 1000 User2 CE
1003 1001 User1 AC下面的SQL希望得到问题的最新判断结果:
SELECT submission_id, problem_id, submission_judge_result
FROM (
SELECT * FROM
voj_submissions
ORDER BY submission_id DESC
) s
WHERE uid = 'User1'
AND problem_id >= 1000
AND problem_id < 1010
GROUP BY problem_id在MySQL 5.6中,它正常工作,并返回以下结果集:
SubmissionID ProblemID JudgeResult
1001 1000 WA
1003 1001 AC但是在MariaDB 10.0.14中,它返回:
SubmissionID ProblemID JudgeResult
1000 1000 AC
1003 1001 AC这意味着ORDER BY DESC没有在MariaDB中执行。我该如何解决这个问题?
参考资料:
发布于 2015-05-05 09:11:06
@bluefeet在这个post中说过
在子查询中使用ORDER不是解决此问题的最佳方法。 作者获取最大值(Post_date)的最佳解决方案是使用子查询返回最大日期,然后将其连接到post_author和最大值日期的表中。
因此,解决办法应该是:
SELECT submission_id, s1.problem_id, submission_judge_result
FROM voj_submissions s1
INNER JOIN (
SELECT MAX(submission_id) AS max_submission_id, problem_id
FROM voj_submissions
WHERE uid = 1000
AND problem_id >= 1000
AND problem_id < 1010
GROUP BY problem_id
) s2
ON s1.problem_id = s2.problem_id
AND s1.submission_id = s2.max_submission_id这在MariaDB和MySQL中都是有效的。
https://stackoverflow.com/questions/30048082
复制相似问题