これは本当に簡単にできるはずだと思いますが、どこかで小さな間違いを犯しているだけです。おそらく、私はコーダーではなく教師であることを付け加えておく必要があります。そのため、私は SQL に精通していません。さらに、私はここでたくさんの質問を見ましたが、どれもうまくいきませんでした.
学生が各質問に入力した最後の回答について、、、およびstudent_answers(id, student_id, question_id, answer, result, date_time)
を取得したいテーブルがあります。そのため、質問 7 に 3 回回答した場合、最後に入力したものだけを見たいと思います。question_id
answer
result
date_time
answer
result
教育目的で、回答を再入力するたびに各行を単純に更新することはできません。
次のクエリを試しました
SELECT id, question_id, answer, result, date FROM Student_Answers
WHERE student_id = 505 AND question_id in (select id from Test_Questions q where q.test_id = 37)
Group by question_id
having date = max(date)
ORDER BY Student_Answers`.`question_id` ASC
しかし、それには複数回答のある質問はまったく含まれておらず、生徒 505 が 1 回回答した質問しかありませんでした。学生 505 は質問 3 と 4 に 2 回答え、残りは 1 回だけ答えました。私は 1、2、5 の結果しか見ませんでした。
このクエリを試しました
SELECT
b.*
FROM
(
SELECT question_id, MAX(date) AS maxdate
FROM TP_Student_Answers
GROUP BY question_id
) a
INNER JOIN
TP_Student_Answers b ON
a.question_id = b.question_id AND
a.maxdate = b.date
and b.student_id = 505
and b.question_id in (select id from TP_Questions q where q.test_id = 37)
ORDER BY
b.question_id
しかし、これは私に3と4しか与えず、彼が一度だけ試みたものはありませんでした. どんな助けでも大歓迎です!
これはデータのサンプルです:
id student_id question_id answer result date
7133 505 1 a correct 2012-11-16 09:03:58
7134 505 2 c wrong 2012-11-16 09:03:58
7135 505 3 e wrong 2012-11-16 09:03:58
7136 505 3 d wrong 2013-12-16 09:03:58
7137 505 4 c correct 2012-11-16 09:03:58
7138 505 4 d wrong 2013-12-16 09:03:58
7139 505 5 blank 2012-11-16 09:03:58
クエリを実行すると、次のようになります。
7133 505 1 a correct 2012-11-16 09:03:58
7134 505 2 c wrong 2012-11-16 09:03:58
7136 505 3 d wrong 2013-12-16 09:03:58
7138 505 4 d wrong 2013-12-16 09:03:58
7139 505 5 blank 2012-11-16 09:03:58
通知エントリ 7135 と 7137 は、これらの質問のそれぞれに対して後で回答があるため省略されています。