mysql查询澄清

时间:2010-05-11 12:39:36

标签: sql mysql greatest-n-per-group

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

表格结构如下:

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 个答案:

答案 0 :(得分:5)

这应该会为您提供每个平台的最新失败。它依赖于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仅获取startTimeplatform行最多的行:

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

答案 1 :(得分:0)

是的,在查询中使用group by Testcaseorder by ID desc limit 1

答案 2 :(得分: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

我建议你将结果表中TestCase列的testcases表中的ID存储起来,而不是'TestCase'。根据此列中的数据类型,您可能会获得更好的性能。