我正在尝试获取用户最近/最后一次尝试的 SCORM 完成报告。但是使用下面的代码,我得到了用户所做的所有尝试,例如尝试 1,2...例如,用户的最新/最后一次尝试是 2,那么我只希望输出中的尝试次数为 2,但在这里我得到了两者完成/未完成的 1 次和 2 次尝试。任何 SQL 查询都会有所帮助。
#这是我的代码
SELECT u.firstname AS First, u.lastname AS Last, c.fullname AS Course, sc.name as scromname, st.attempt AS Attempt, st.value AS Status,
FROM_UNIXTIME(st.timemodified,"%m-%d-%Y") AS Date
FROM mdl_scorm_scoes_track AS st
JOIN mdl_user AS u ON st.userid=u.id
JOIN mdl_scorm AS sc ON sc.id=st.scormid
JOIN mdl_course AS c ON c.id=sc.course
WHERE st.element='cmi.core.lesson_status'
UNION
SELECT user2.firstname AS First, user2.lastname AS Last, c.fullname AS Course, sc.name as scromname, "-" AS Attempt, "not_started" AS Status, "-" AS Date
FROM mdl_user_enrolments AS ue
JOIN mdl_enrol AS e ON e.id = ue.enrolid
JOIN mdl_course AS c ON c.id = e.courseid
JOIN mdl_user AS user2 ON user2 .id = ue.userid
JOIN mdl_scorm AS sc ON sc.course=c.id
left Join mdl_scorm_scoes_track AS st on st.scormid=sc.id AND st.userid=user2.id
WHERE st.timemodified IS NULL
ORDER BY Course, Last, First, Attempt
我对你的模式了解不多,但我还是会描述这个想法。希望您能够为您的模式实现这个想法,但如果没有,那么您将需要提供更多信息。
基本上,我们假设有一个 tries 表,像这样:
tries(id, dt, user_id, ...someothercolumns...)
现在,让我们做一个
left join
排除所有非最新元素,像这样:
select tries1.dt, tries1.user_id, ...
from tries tries1
lef join tries tries2
on tries1.user_id = tries2.user_id and tries1.dt < tries2.dt
where tries2.id is null;
说明:
tries1
tries2
记录