我从你的问题是,你想要得到“正确的”,“项”,“百分比”等。 bcc_fs_exam_result
中具有最后一个或第一个日期的行的列。
如果这是正确的,那么您可以通过首先找到每个id_user
的最小或最大日期,然后将其加入考试结果表中,过滤bcc_fs_exam_result
。
SELECT
r.correct,
r.items,
r.percentage,
r.date_taken,
u.username,
u.FN,
u.user_course_type,
IFNULL(u.user_major_type,'N/A') as user_major_type,
u.level_name,
u.section_name
FROM bcc_fs_exam_result r
INNER JOIN (
SELECT u.id_user,
u.username,
CONCAT(u.lastname,', ',u.firstname) as FN,
c.user_course_type,
m.user_major_type,
l.level_name,
s.section_name
FROM bcc_fs_user u
LEFT JOIN bcc_fs_user_course c on c.id_user_course = u.id_user_course
LEFT JOIN bcc_fs_user_major m on m.id_user_major = u.id_user_major
LEFT JOIN bcc_fs_group_level l ON l.id_level = u.id_level
LEFT JOIN bcc_fs_group_section s ON s.id_section = u.id_section
) u ON r.id_user = u.id_user
INNER JOIN (
SELECT
id_user, max(r.date_taken) as last_date_taken
FROM bcc_fs_exam_result
GROUP BY id_user
) as lastdate ON lastDate.id_user = r.id_user and r.date_taken = lastdate.last_date_taken
这可以更简单地写为:
SELECT
r.correct,
r.items,
r.percentage,
r.date_taken,
u.username,
CONCAT(u.lastname,', ',u.firstname) as FN,
c.user_course_type,
IFNULL(m.user_major_type,'N/A') as user_major_type,
l.level_name,
s.section_name
FROM bcc_fs_exam_result r
INNER JOIN (
SELECT
id_user, max(r.date_taken) as last_date_taken
FROM bcc_fs_exam_result
GROUP BY id_user
) as lastdate ON lastDate.id_user = r.id_user and r.date_taken = lastdate.last_date_taken
INNER JOIN bcc_fs_user u on r.id_user = u.id_user
LEFT JOIN bcc_fs_user_course c on c.id_user_course = u.id_user_course
LEFT JOIN bcc_fs_user_major m on m.id_user_major = u.id_user_major
LEFT JOIN bcc_fs_group_level l ON l.id_level = u.id_level
LEFT JOIN bcc_fs_group_section s ON s.id_section = u.id_section
你认为id_user
+ date_taken
是bcc_fs_exam_result
代理键,你或许应该有约束,如果在所有可能强制执行。否则,从您的样本数据看,唯一ID列id_result
的顺序跟在date_taken
之后,所以您可能最好使用Max(id_result)
而不是Max(date_taken)
。这将避免返回重复的行为一个id_user
其中两行bcc_fs_exam_result
具有相同的taken_date
和`id_user。
日期改变,但(正确的,项目和百分比)根本没有改变我所缺的是什么 –
基本上它是相连的,毕竟他们在同一张表中,所以它应该与其他字段一致,只要我使用日期字段(正确,项目和百分比)保持不变 –