MYSQL:选择具有2列或2列以上不同列的最近一行



我使用的系统通过每次学生重新提交答案时创建一个新条目,将学生对问题的回答存储在表中。不过我只想要最后的答案。我在这里查看了一些最棒的团队帖子,并试图应用其中的一些查询,但它们还没有产生我所希望的结果。我得到的最接近的答案是最近一个问题的最新答案,但我需要学生回答的每个问题的答案。以下是迄今为止我得到的最近的答案。

select t1.* from response_history as t1
LEFT OUTER JOIN response_history as t2
ON t1.student_id = t2.student_id
AND (t1.`date` > t2.`date`
OR (t1.`date` = t2.`date` AND t1.id > t2.id))
where t2.student_id IS NULL;

这就像SQL中的大多数答案一样。只选择列上具有最大值的行,您只需要分组并加入学生ID和问题ID。

SELECT t1.*
FROM response_history AS t1
JOIN (SELECT student_id, session_question_id, MAX(date) AS date
FROM response_history
GROUP BY student_id, session_question_id) AS t2
ON t1.student_id = t2.student_id 
AND t1.session_question_id = t2.session_question_id
AND t1.date = t2.date

经过更多的尝试和错误,我看到了这个答案,我能够提出这个似乎正确的查询。

SELECT t1.* FROM response_history t1
INNER JOIN (SELECT t2.student_id, t2.session_question_id, MAX(`date`) as `date`
FROM response_history t2
group by session_question_id, student_id) as groupedt2
ON t1.student_id = groupedt2.student_id and t1.`date` = groupedt2.`date`

最新更新