Situação comum: você descobre que uma questão do banco tem gabarito errado, mas ela foi alocada via random/question set em vários quizzes. Como achar quem foi afetado?
A chave está em mdl_question_attempts.questionid — essa coluna registra a questão real servida ao aluno, independentemente de ter sido escolhida por slot fixo ou via question_set_references. Ou seja, não precisa varrer a estrutura de seleção randômica: basta filtrar pelo ID da questão.
SELECT DISTINCT
u.id,
u.firstname,
u.lastname,
u.email,
q.id AS quiz_id,
q.name AS quiz_name,
qa.id AS quiz_attempt_id,
qa.state AS attempt_state,
FROM_UNIXTIME(qa.timefinish) AS finished_at,
qatt.responsesummary,
qatt.rightanswer
FROM mdl_question_attempts qatt
INNER JOIN mdl_question_usages qu
ON qu.id = qatt.questionusageid
INNER JOIN mdl_quiz_attempts qa
ON qa.uniqueid = qu.id
INNER JOIN mdl_quiz q
ON q.id = qa.quiz
INNER JOIN mdl_user u
ON u.id = qa.userid
WHERE qatt.questionid = ?
AND qa.preview = 0
AND qa.state IN ('finished', 'inprogress', 'overdue')
AND u.deleted = 0
Passe o parâmetro id da questão em ?
Esse código foi executado na versão 5 do Moodle. Deve funcionar na versão da família 3.x e 4.x