уточнение запроса MySQL - PullRequest
4 голосов
/ 11 мая 2010

У меня есть вопрос, который мне интересно, если результат, который я получаю, тот, который я ожидаю.

Структура таблицы выглядит следующим образом:

Table :  results     
ID TestCase Set  Analyzed Verdict StartTime             Platform
1  1010101  ros2 false    fail    18/04/2010 20:23:44   P1
2  1010101  ros3 false    fail    19/04/2010 22:22:33   P1
3  1232323  ros2 true     pass    19/04/2010 22:22:33   P1
4  1232323  ros3 false    fail    29/04/2010 22:22:33   P2

Table : testcases
ID TestCase type
1  1010101  NOSNOS
2  1232323  N212NS

есть ли способ отобразить только последние ошибки на каждой платформе?

в указанном выше случае

Результат должен быть:

 ID TestCase Set  Analyzed Verdict StartTime             Platform type 
 2  1010101  ros3 false    fail    19/04/2010 22:22:33   P1       NOSNOS 
 4  1232323  ros3 false    fail    29/04/2010 22:22:33   P2       N212NS

Ответы [ 3 ]

5 голосов
/ 11 мая 2010

Это должно дать вам последние ошибки для каждой платформы. Это зависит от id с последовательностью по времени.

Замените * на нужные вам столбцы.

Select *
From results r
Join testcases t On ( t.testCase = r.testCase )
Where r.id In (
    Select Max(id)
    From results
    Where verdict = 'fail'
    Group By platform
)

В качестве альтернативы вы можете использовать Left Join, чтобы получить только строки с наибольшим startTime на platform:

Select *
From results r
Join testcases t On ( t.testCase = r.testCase )
Left Join results r2 On (     r2.platform = r.platform
                          And r2.verdict = r.verdict
                          And r2.startTime > r.startTime )
Where r.verdict = 'fail'
  And r2.id Is Null
0 голосов
/ 11 мая 2010

Это должно сработать, я не уверен, будет ли оно эффективным:

select r.*, t.type
from
(
Select TestCase, max(StartTime) lastDate
From results
group by TestCase
)big
inner join results r on r.StartTime = big.lastDate and r.TestCase = big.TestCase
inner join testcases t on t.TestCase = r.TestCase

Я предлагаю вам сохранить идентификатор из таблицы тестовых случаев в столбце TestCase таблицы результатов вместо «TestCase». В зависимости от типа данных в этом столбце производительность может быть немного выше.

0 голосов
/ 11 мая 2010

Да, используйте group by Testcase и order by ID desc limit 1 с вашим запросом

...