我觉得这应该很容易做到,因为我只是在某个地方犯了一些小错误。可能应该补充一点,我是一名教师,而不是编码员,所以我不太精通 SQL。此外,我确实在这里查看了一堆问题,但没有一个很有效。
我有表格,student_answers(id, student_id, question_id, answer, result, date_time)
我想得到question_id
,和学生为每个问题输入的最后一个答案。因此,如果他们对问题 7 回答了 3 次,我只想看到最后一个并且他们输入了。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学生回答过一次的问题。学生 505 回答了问题 3 和 4 两次,其余的只回答了一次,我只看到了 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 被省略,因为每个问题都有稍后的答案