Mysql 为每个条目选择最近的答案
我觉得这应该很容易做到,我只是在某个地方犯了一些小错误。也许应该补充一点,我是一名教师,而不是一名程序员,所以我对SQL不是很精通。此外,我确实在这里看了一大堆问题,但没有一个是有效的 我有表Mysql 为每个条目选择最近的答案,mysql,group-by,greatest-n-per-group,Mysql,Group By,Greatest N Per Group,我觉得这应该很容易做到,我只是在某个地方犯了一些小错误。也许应该补充一点,我是一名教师,而不是一名程序员,所以我对SQL不是很精通。此外,我确实在这里看了一大堆问题,但没有一个是有效的 我有表学生答案(id、学生id、问题id、答案、结果、日期时间)我想获得学生为每个问题输入的最后一个答案的问题id、答案、结果和日期时间。因此,如果他们对问题7回答了三次,我只想看到他们输入的最后一个答案和结果 出于教学目的,我不能简单地在每行重新输入答案时更新它们 我尝试了以下查询 SELECT id, que
学生答案(id、学生id、问题id、答案、结果、日期时间)
我想获得学生为每个问题输入的最后一个答案的问题id
、答案
、结果
和日期时间
。因此,如果他们对问题7回答了三次,我只想看到他们输入的最后一个答案
和结果
出于教学目的,我不能简单地在每行重新输入答案时更新它们
我尝试了以下查询
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被省略,因为每个问题都有一个较新的答案检查此查询:(为所有学生提供所有问题的最新答案)
SELECT id, student_id, question_id, answer, result, date_time
FROM (SELECT *,
CASE
WHEN (@prevQ = question_id AND @prevS = student_id)
THEN
@marker := 0
ELSE
@marker := 1
END
AS marker,
@prevS := student_id,
@prevQ := question_id
FROM student_answers
ORDER BY student_id ASC, question_id ASC, date_time DESC) aView,
(SELECT @prevQ = -1, @prevS = -1) a
WHERE marker = 1;
对于特定的学生id
和特定的问题id
s:
SELECT id, student_id, question_id, answer, result, date_time
FROM (SELECT *,
CASE
WHEN (@prevQ = question_id AND @prevS = student_id)
THEN
@marker := 0
ELSE
@marker := 1
END
AS marker,
@prevS := student_id,
@prevQ := question_id
FROM student_answers
WHERE student_id = 501
AND question_id IN (SELECT id
FROM TP_Questions q
WHERE q.test_id = 37)
ORDER BY student_id ASC, question_id ASC, date_time DESC) aView,
(SELECT @prevQ = -1, @prevS = -1) a
WHERE marker = 1;
您能否共享样本数据(记录)以获得更好的解决方案。您的样本数据似乎缺少足够的信息,您是否也能给出所需的结果?