2016-03-27 3 views
0

У меня есть следующая таблица:MySQL: игнорируя дубликаты записей в выберите

Test_Results 
|ID|Test Name| Status| Retry| 
|1 | test1 | passed| 0 | 
|2 | test2 | failed| 0 | 
|3 | test2 | passed| 1 | 
|4 | test3 | failed| 0 | 
|5 | test3 | failed| 1 | 
|6 | test4 | failed| 0 | 
|7 | test4 | failed| 1 | 
|8 | test4 | passed| 2 | 

Логика заключается в следующем: если тест не пройден, то он повторен, а поле Retry указывает число повторных попыток. Например, тест 2 не удался (ID 2) и был выполнен после повтора (ID 3). Или, тест4 не прошел 2 раза (идентификаторы 6 и 7) и сработал в 8-й раз.

Мне нужен запрос, который выберет все тесты, взяв только последний результат повторной попытки. Таким образом, в случае test2 он будет считать ID3 = пройденным, для test3 он будет принимать ID 5 = failed, а для test4 он примет идентификатор 8 = пройден.

+1

Мой первый совет выбросить 'MySQL' и обратиться к более разумное решение, как' Postgresql' или 'MS SQL' и т.д. – Jacobian

ответ

0

Я думаю, вы должны получить максимальный идентификатор, а не максимальный повторить этот путь

select * from test_results 
where (test_name, id) in select (test_name, max(id) from test_results group by test_name)) 
+0

Fair точки, но там не было ничего в этом вопросе, предполагая это, кроме здравого смысла – Rik

1
SELECT * FROM Test_Results t 
WHERE t.ID in (SELECT MAX(ID) FROM Test_Results GROUP BY Test_Name) 
0

Получить максимальный идентификатор для имени теста и получить его результаты.

select * from test_results where id in 
(select max(id) from test_results group by test_name); 

+----+-----------+--------+-------+ 
| id | test_name | status | retry | 
+----+-----------+--------+-------+ 
| 1 | test1  | passed |  0 | 
| 3 | test2  | passed |  1 | 
| 5 | test3  | failed |  1 | 
| 8 | test4  | passed |  2 | 
+----+-----------+--------+-------+ 
Смежные вопросы