J'ai posé une question similaire before seulement pour découvrir plus tard que ce que je pensais être la réponse ne marchait pas parce que je n'avais pas posé la bonne question (et n'avais pas remarqué que le répondeur m'a dit ça). Pour revisiter, j'ai un tableau de comparaisons. J'essaye de sélectionner la rangée avec la version maximum pour chaque ensemble de deux étudiants. Donc ce que je faisais:Sélection de Max de deux colonnes (revisité)
SELECT subID1, subID2, stu1,stu2,comparisonID,MAX(stu1vers+stu2vers) AS maxvers
FROM comparisons
WHERE assignmentID=9 AND stu1!=stu2
GROUP BY stu1,stu2;
+--------+--------+------+------+--------------+---------+
| subID1 | subID2 | stu1 | stu2 | comparisonID | maxvers |
+--------+--------+------+------+--------------+---------+
| 15 | 11 | 1 | 6 | 64 | 6 |
| 11 | 3 | 6 | 1 | 55 | 5 |
+--------+--------+------+------+--------------+---------+
ne fonctionnerait pas, car là je ne avais besoin la ligne où maxvers était 6. La réponse que je suis arrivé la dernière fois était:
SELECT subID1,subID2,stu1,stu2, comparisonID
FROM comparisons WHERE stu1Vers + stu2Vers = (
SELECT MAX(stu1Vers+stu2Vers)
FROM comparisons
WHERE stu1 != stu2 AND assignmentid=9
) AND stu1!=stu2 AND assignmentid=9
GROUP BY stu1,stu2;
Ce que je pensais vraiment que travaillé - seulement pour découvrir que cela demande la version maximale dans la table pour cette assignation, puis cherche les lignes qui correspondent à cette version maximale. Mais ce n'est pas bon, parce que deux étudiants pourraient avoir un numéro de version inférieure:
+--------+--------+------+------+--------------+---------+
| subID1 | subID2 | stu1 | stu2 | comparisonID | maxvers |
+--------+--------+------+------+--------------+---------+
| 44 | 23 | 37 | 36 | 153 | 2 |
| 44 | 36 | 37 | 39 | 156 | 3 |
| 44 | 34 | 37 | 40 | 154 | 3 |
| 36 | 23 | 39 | 36 | 95 | 3 |
| 36 | 34 | 39 | 40 | 96 | 4 |
...
+--------+--------+------+------+--------------+---------+
Là, je dois sélectionner tous les enregistrements, comme chaque combinaison de Stu1 et stu2 est unique. Comment puis-je les lignes où max (sub1vers + sub2vers) pour chaque combinaison de stu1, stu2 (c'est-à-dire, comme dans la première table là-haut, où j'ai toujours juste besoin de comparaison d'ID 64).
Ces deux requêtes me donnent réellement des résultats différents. Le top me donne le bon max (stu1vers + stu2vers), mais avec le mauvais ID de comparaison. Le bas semble avoir raison. –
Oui, cette première suggestion ne fonctionnera pas. Si vous n'incluez pas de champ dans la commande, la valeur obtenue peut être pour n'importe quelle ligne, pas nécessairement la valeur de la ligne maximale. –
Vous voulez dire dans le 'groupe par'. :) – vladr