获得最新的测试结果

时间:2011-04-19 11:47:37

标签: mysql

我有一个包含3个表的数据库。

第一个表包含具有字段fldID,fldName,fldPIN等的学生。

第二个表格包含学生必须使用字段studentID和questionID

回答的问题列表

第三个表格每次学生回答一个问题时都包含一行,并且包含studentID,questionID,response和score字段。每个问题可能有多个答案。

我想要一个查询,允许我获取学生姓名(通过他们的PIN码)和他们需要回答的问题列表,以及每个问题的最新分数。未回答的问题将得分为空。

我不确定如何为此加入。

非常感谢您的帮助。

戴夫

我已经想出了这个sql。你能看看,让我知道这是有效还是非常糟糕!!我很难理解你的帖子,所以很难想出来。

SELECT
`tbldelegate`.`fldFirstName`,
`tbldelegate`.`fldSurname`,
`tbldelegatequestions`.`fldQuestionID`,
`latestScores`.`fldScore`
FROM
`tbldelegate`
Left Join `tbldelegatequestions` ON `tbldelegatequestions`.`fldDelegateID` = `tbldelegate`.`fldID`
Left Join (SELECT *
FROM
(SELECT  max(fldID) as maxID
FROM tblscoredata 
GROUP BY 
`tblscoredata`.`fldDelegateID`,
`tblscoredata`.`fldSection`,
`tblscoredata`.`fldQuestion`
) AS x INNER JOIN `tblscoredata` AS f ON f.fldID = x.maxID) AS `latestScores` ON `latestScores`.`fldQuestion` = `tbldelegatequestions`.`fldQuestionID`
WHERE
`tbldelegate`.`fldPIN` =  '11'

2 个答案:

答案 0 :(得分:1)

我猜测某些表的名称,但这样的事情应该可以解决问题。

SELECT s.fldName, sq.questionId, r.score 
FROM students s
INNER JOIN studentQuestions sq ON s.fldID = sq.studentID 
LEFT JOIN questionResponses r ON sq.questionID = r.questionID AND sq.studentID = r.studentId 
WHERE s.fldPIN = 12345;

尝试此操作以获取学生必须回答的每个问题的最新或未答复结果(这是基于使用auto_increment ID和ID值较高的较新记录)。

SELECT s.fldName, sq.questionID, r.score 
FROM students s
INNER JOIN studentQuestions sq ON s.id = sq.studentID
LEFT JOIN questionResponses r ON sq.questionId = r.questionID AND sq.studentID = r.studentId
LEFT OUTER JOIN questionResponses r2 ON sq.questionID = r2.questionID AND sq.studentID   = r2.studentID AND r.id < r2.id
WHERE r2.id IS NULL AND s.fldPIN = 12345

答案 1 :(得分:0)

戈登的回答非常好。然而,由于Dave正在努力与MAX,我无法抗拒使用它发布变体。 我的猜测是,戈登的回答有更好的表现,他的回答可能是我选择的两个。

SELECT s.fldName, sq.questionID, r.score 
FROM students s
INNER JOIN studentQuestions sq ON s.fldID = sq.studentID 
LEFT JOIN questionResponses r ON sq.questionId = r.questionID AND sq.studentID = r.studentId
WHERE r.id = (SELECT MAX(id) FROM questionResponses r2 where r2.id = r.id)
AND s.fldPIN = 12345