2012-07-24 3 views
2

J'ai une table comme ceci:obtenir des entrées par date max

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`) 
); 

et

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

je dois sélectionner le nombre de réponses correctes et incorrectes, MAIS: si la même question a plusieurs réponses (il peut y avoir plus d'entrées dans "répondu" avec même question_id) seulement le dernier (déterminé par "répondu.créé") comptera.

structure de résultat

devrait ressembler à:

correct count 
    0  1 
    1  3 

Fiddle: http://sqlfiddle.com/#!2/11073

Mon essai:

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

cela fonctionne, mais compte même question_ids plus d'une fois.

Répondre

-1

Je crois qu'il n'y a aucun moyen de le faire sans un curseur, parce que vous voulez évaluer chaque question si elle a zéro ou plusieurs réponses, et si elle a plus d'une réponse que vous voulez obtenir le plus récent, ce qui signifie que vous voulez interagir sur chaque Question_id.

Vérifiez ce code: http://dev.mysql.com/doc/refman/5.0/en/cursors.html

Et pour chaque numéro de question que vous vérifier si la dernière réponse est juste ou non, que vous ajoutez dans le droit et les variables erronées.

0

Essayez ceci:

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 

Il y a probablement de meilleures options (je n'aime pas se joindre à la date, si les dates sont répétées?) Mais je pense qu'il vous donnera ce que vous voulez (je veux dire , si vous voulez la date max, vous ne devriez pas avoir des dates répétées)