4

我有一个查询,我想知道我得到的结果是否是我期望的结果。

表结构如下:

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
4

3 回答 3

5

这应该为您提供每个平台的最新故障。它依赖于ids 按时间顺序排列。

*用您实际需要的列替换。

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
)

或者,您可以使用 aLeft Join仅获取最大startTimeper的行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
于 2010-05-11T12:42:23.760 回答
0

这应该可以解决问题,我不确定它是否有效:

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

我建议您将测试用例表中的 ID 存储TestCase在结果表的列中,而不是“测试用例”中。根据此列上的数据类型,您可能会获得更好的性能。

于 2010-05-11T13:07:27.197 回答
0

是的,使用group by Testcaseorder by ID desc limit 1与您的查询

于 2010-05-11T12:42:28.120 回答