2010-03-20 4 views
0

J'ai un testdata comme ceci:sélectionner les données de MySQL en utilisant MAX

DROP TABLE SELECT_PASS; 
CREATE TABLE SELECT_PASS(ID INT(20),TESTCASE VARCHAR(20),RESULT VARCHAR(20)); 
INSERT INTO SELECT_PASS VALUES(1,"TC1","PASS"); 
INSERT INTO SELECT_PASS VALUES(2,"TC2","PASS"); 
INSERT INTO SELECT_PASS VALUES(3,"TC3","INCONC"); 
INSERT INTO SELECT_PASS VALUES(4,"TC1","FAIL"); 
INSERT INTO SELECT_PASS VALUES(5,"TC21","FAIL"); 
INSERT INTO SELECT_PASS VALUES(6,"TC4","PASS"); 
INSERT INTO SELECT_PASS VALUES(7,"TC3","PASS"); 
INSERT INTO SELECT_PASS VALUES(8,"TC2","PASS"); 
INSERT INTO SELECT_PASS VALUES(9,"TC1","TIMEOUT"); 


SELECT TESTCASE, MAX(RESULT) FROM SELECT_PASS GROUP BY TESTCASE; 

Le ResultSet que je reçois est:

TC1 TIMEOUT 
TC2 PASS 
TC21 FAIL 
TC3 PASS 
TC4 PASS 

Fondamentalement, je veux voir les testcases qui n'a jamais passé.

Une façon de le faire?

Merci.

Répondre

4

Cela vous donnera tous les noms de cas de test qui n'ont pas de résultats passe:

SELECT DISTINCT TESTCASE FROM SELECT_PASS 
WHERE TESTCASE NOT IN (SELECT TESTCASE FROM SELECT_PASS WHERE RESULT = 'PASS') 
+0

CECI EST EXACTEMENT CE QUE JE VOULAIS. – JPro

1
SELECT 
    TESTCASE, 
    MAX(RESULT) RESULT 
FROM 
    SELECT_PASS 
GROUP BY 
    TESTCASE 
HAVING 
    TESTCASE != 'PASS' 
+0

désolé, a dû mettre à jour le SQL – used2could

+0

+ 1, il devrait être «AVOIR RÉSULTAT ...», et cela ne fonctionne que si les valeurs sont ordonnées (par exemple numérique). – user187291

0

j'utiliser des valeurs numériques pour résultat, avec passage étant le plus grand (ou plus bas) et la requête MAX:

SELECT TESTCASE, MAX(RESULT) AS r FROM SELECT_PASS GROUP BY TESTCASE HAVING r < 999 

où 999 est la valeur numérique pour PASS.

+0

cela n'a pas fonctionné non plus – JPro

+0

désolé d'entendre que – user187291

+0

mais j'ai appris une nouvelle valeur pour PASS. THX – JPro

Questions connexes