按最大日期获取条目

时间:2012-07-24 10:46:03

标签: mysql

我有一张这样的表:

CREATE TABLE IF NOT EXISTS `answered` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `question_id` int(11) NOT NULL,
  `correct` tinyint(1) NOT NULL DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
);

CREATE TABLE IF NOT EXISTS `questions` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
);

我需要选择正确和错误答案的计数,但是:如果相同的问题得到多个答案(可能有更多的条目在“回答”中具有相同的question_id)只有最新的(由“确定”答案。创建“)应计数。

结果结构应该是:

correct  count 
  0        1 
  1        3 

小提琴: http://sqlfiddle.com/#!2/11073

我的试用版:

SELECT a.correct, count(*) as count
FROM answered a 
JOIN questions q ON a.question_id = q.id 
GROUP BY correct

这有效,但不止一次计算相同的question_ids。

2 个答案:

答案 0 :(得分:0)

试试这个:

SELECT Correct, count(*) as count
FROM questions q
JOIN (select question_id, max(created) as 'MaxCreated' from answered group by question_id) a 
ON a.question_id = q.id 
JOIN answered t1 on a.question_id = t1.question_id and  a.MaxCreated = t1.Created
GROUP BY correct

可能有更好的选择(我不喜欢按日期加入,如果日期重复怎么办?)但我认为它会给你你想要的东西(我的意思是,如果你想要最大日期,你不应该'重复日期)

答案 1 :(得分:-1)

我认为没有光标就没有办法做到这一点,因为如果它有零个或多个答案,你想评估每个问题,如果它有多个答案,你想得到最新的答案,表示您希望在每个Question_id上进行交互。

查看此代码: http://dev.mysql.com/doc/refman/5.0/en/cursors.html

对于每个问题ID,您检查最新答案是否正确,而不是添加正确和错误的变量。