选择或更新2组标准以获取mysql上的最大值

时间:2019-04-21 05:48:23

标签: mysql greatest-n-per-group

我试图弄清楚如何正确地在连接上使用group和max(),我正在对穆迪(开源学校软件)mysql数据库进行一些解析。允许学生不确定地重新参加该特定程序的测验,但是我需要能够更新课程完成日期以反映他们上次参加考试的时间,因为很多其他事项取决于完成字段。  mdl_quiz_attempts表存储所有测验的所有尝试,用户标识将具有许多相同的条目,但是尝试编号不是表唯一的,而是学生和该行的键都是唯一的。意思是学生有多个条目。在mdl_course_modules表上,instance字段是mdl_quiz表的键,而mdl_course_modules_completion coursemoduleid字段是mdl_course_modules的键。

所以我要做的是: 给定学生证 将mdl_course_completion.time修改为mdl_quize_attempts.time修改 在mdl_quiz_attempts上的行是每个测验的用户ID的最大尝试次数。(必须在课程模块实例表中查找quiz_attempts的测验字段以获取课程完成模块ID的实例ID)

这是示例性部分表格。

mdl_quiz_attempts
id  quiz    userid  attempt timemodified    
2   1   3   6   1365408901  
6   1   4   1   1369873688  
7   2   4   1   1369877532  
8   7   4   1   1369881431  
9   7   4   2   1369882897  
12  5   4   1   1505165504  
13  6   4   1   1369887643  
17  8   4   1   1369958105  
18  1   4   2   1374557701  
22  7   4   3   1374639901  
23  6   4   7   1374640202  
24  5   4   2   1374639901  
25  8   4   2   1374639901  
26  2   4   2   1374639301  
27  2   6   1   1376620469  
29  2   12  1   1389915486  
30  1   23  1   1390978667  
31  1   23  2   1391030924  
32  2   23  1   1392113103  
33  2   23  2   1392696602  
34  2   23  3   1392767435  
35  7   12  1   1398914256  
36  8   43  1   1405281193  
37  1   50  1   1405522411  
38  5   43  1   1505165504  

mdl_course_modules
id  course  module  instance    section 
3   2   9   2   3   
5   2   17  2   4   
7   2   17  3   5   
8   2   17  4   6   
9   2   17  5   7   
10  2   17  6   8   
11  2   17  7   9   
12  2   17  8   10  
13  2   17  9   11  
14  2   17  10  12  
15  2   17  11  13  
25  2   16  1   14  
26  2   23  1   4   
28  2   7   1   14  
30  4   9   4   26  
42  4   23  3   33  
45  4   23  6   38  
46  4   23  7   37  
47  4   23  8   36  
48  4   23  9   35  
49  4   23  10  32  
50  4   23  11  34  
51  5   9   5   27  
53  5   23  12  43  
55  5   23  13  44  

mdl_quiz
id  name    
10  Unit 10 Quiz    
11  Unit 2 Quiz 
12  Unit 3 Quiz 
13  Unit 5 Quiz 
14  Unit 1 Quiz 
15  Unit 8 Quiz 
16  Unit 9 Quiz 
17  Unit 7 Quiz 
18  Unit 4 Quiz 


mdl_course_modules_completion
id  coursemoduleid  userid  completionstate viewed  timemodified    
14  25  2   0   1   0   
15  25  6   0   1   0   
67  25  4   1   1   1369873688  
68  28  4   1   0   1369874483  
69  192 4   1   0   1369875233  
70  184 4   1   1   1369877532  

1 个答案:

答案 0 :(得分:1)

像这样吗?

update mdl_course_modules_completion c
join mdl_quiz_attempts a on a.userid = c.userid
join (select max(attempt) max_attempts from mdl_quiz_attempts group by userid) max on max.max_attempts = a.attempt
set c.timemodified = a.timemodified
where c.userid = :<USER_ID>